新手学c十一:内存管理

首页C新手学c十一:内存管理(2013年08月30日)

1.内存分为

代码段:存储程序代码

数据段:静态、全局数据(有初始化和未初始化是分开的)、 常量

堆区(heap):动态内存分配 主要类实例神马的吧 呵呵 不连续存放

栈区(stack):局部变量 函数参数 自动释放

2.动态内存使用必须引用 stdlib.h

void *malloc(unsigned int size); ?分配空间并复制原空间内容

free

[c]

int *p;

p = (int*)malloc(sizeof(int));//等效 p = malloc(sizeof(int))

if (p != NULL) {

*p = 4;

printf("*p = %d \n",*p);

free(p);

p = NULL;

}

else

{

printf("application is error!");

exit(EXIT_FAILURE);

}

//=======================

*p = 4?

[/c]

2.内存释放

a.free释放了内存 但指针仍然指向该位置 变成野指针

b.除了用free释放 还需要把指针初始化 p =NULL;

3.野指针成因:

a.指针未初始化

b.p被free后 没有置为null 让人误以为是个合法指针

c.指针操作超越了变量作用范围

4.realloc函数

a.malloc基础上增加free原空间内容(初始化为0)

b.改变已经分配的内存 用于增大空间的时候

、、======================

终于完成了初级学习了 ? 感觉没有想象中复杂啊

以前为毛认为那么复杂呢 搞不懂了

接下来重新进入oc部分 继续加油喔

标签: none

添加新评论 »