C程序的内存映射像
C程序中变量的内存分配方式
从静态存储区分配
全局变量和静态变量
在栈(stack)上创建
存放函数参数值,局部变量值等。
在执行函数调用时,系统在栈上为函数内的句柄变量及形参分配内存,函数执行结束时,自动释放这些内存。
C程序中变量的内存分配方式
从堆(heap)上分配
在程序运行期间,用动态内存分配函数来申请的内存都是从堆上分配的,动态内存的生存期由程序员自己来决定。
动态内存分配函数 动态内存分配函数
#include<stdio.h>
#include<stdlib.h>
#define N 10000
int main()
{int *p,i=0;while(1){p=(int*)malloc(N*sizeof(int));printf("%p",p);*p=i++;if(p==NULL)break;}system("pause");return 0;
}
NULL指针
NULL是空指针。在C中,NULL取值为0,常常用以表示指针不指向任何地方的一种状态。
void*表示指针指向的目标对象无数据类型。
注意两者的区别。
C程序的内存映射
常见的内存错误
内存分配未成功进行使用
内存分配成功,但没有初始化即开始使用
内存分配成功并初始化,但发生越界使用
申请内存后没有及时释放内存
释放内存后仍继续使用
关于内存分配编程的建议原则
仅在需要时才使用malloc
malloc和free要配对使用,malloc在函数入口,free在函数出口使用malloc时要检查函数返回值,使用free函数后,将指针设置为NULL,不要把句柄变量的地址做为函数返回值返回。