动态内存分配
来源:互联网 发布:钢琴演奏软件 编辑:程序博客网 时间:2024/06/09 15:40
//解决方案:让空间在函数执行完毕之后,系统不会收即可,定义成全局变量或者静态变量,或者再堆区开辟空间.
/** * 存储区的划分: (1)栈区:栈区存储局部变量,栈区的内存是由系统自动管理,系统开辟,系统回收,无需程序员管理.
(2)堆区:通过堆区内存分配函数,分配的空间都在堆区,堆区的最大特点:堆区的空间需要程序员手动管理,手动开辟,手动释放.(OC常用)
(3)常量区:对于字符常量,整形常量,浮点型常量,字符串常量统一存储在该区,该区的内存由系统自动管理,特点:常量区的内容不可修改.
(4)静态区,全局区:存储全局变量以及静态变量.内存由系统管理,但是在程序的运行期间空间都不会释放.
(5)代码区:编译之后形成的CPU指令存储在该区.
概念: 局部变量:在函数内部定义的变量,数组.(栈区)
全局变量:在函数外部定义的变量,数组.(全局区)
静态变量:由static修饰的变量.(静态区) */
//堆区内存分配函数
//malloc,需要指定需要开辟的空间大小
//返回在堆区开辟的空间的地址
//void *是一个泛型,可以代表所有的指针类型
//比如: char *, int *, float *, Student *,
char *p =malloc(8);//确定开辟的空间要存储的数据//
p = "android"; //常量区变量不可更改.
strcpy(p,"Android");
printf("%s\n", p + 4);
*(p +4) ='b';
printf("%s\n", p + 3);
free(p);//释放堆区内存,删除只是标记删除,不会删除内容
//free(p);
//1.野指针错误
//产生原因:访问不该访问(已经没有使用权,空间已经释放,还给系统)的内存.
//解决方案:释放内存的所有权的同时将地址也清除掉.
p = NULL;//指向无效的区域
//2.过度释放
//产生原因:对一块内存释放(free)多次.
//解决方案:保证只释放(free)一次,将其他的释放操作删掉.(会立即carsh)
//3.内存泄露
//产生原因:分配了内存使用完以后,没有释放掉,造成内存堆积,最后会因为没有内存可分配,而造成程序crash
//解决方案:使用玩内存后,要将内存立即释放掉.
- 动态内存分配
- 关于动态内存分配
- 关于动态内存分配
- 动态内存分配
- 动态内存分配
- 动态内存分配
- 动态内存分配
- 动态内存分配
- C++ 动态内存分配
- VC动态内存分配
- 动态数组分配内存
- C++动态内存分配
- 动态内存分配
- 动态内存分配
- 动态内存分配
- 动态内存分配
- 动态内存分配+链表
- 动态内存分配函数
- Java获取下个月的最后一天
- 如何在OTN网站快速找到asm包并下载 (Oracle RAC)
- 购买水烟壶
- ios申请真机调试( xcode 5)详细解析
- Virtual Destructor
- 动态内存分配
- nyoj ASCII码排序
- linux进程并发模型生产者和消费者模式编程
- 九九乘法表
- 鸡兔同笼
- nyoj 画图
- nyoj- 成绩转换
- nyoj-大小写互换
- HDU 4355 Party All the Time(三分)