第十章 内存管理--堆
- 内存的申请和释放主要在堆区操作
- 堆区内存需要程序员使用malloc函数申请,使用free函数释放内存
- “申请就有、释放就没”-->当堆内存被申请后,如果不释放的话将一直有效,直到调用释放函数或程序结束
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char str[100]="hello"; //malloc(100);// 注意,malloc 必须接收地址。潜在内存泄漏 , // 堆空间,不能读写,因为没有标识符与这段内存关联 char *p =(char*) malloc(100); if(NULL == p) // 申请内存后,需要判断,是否申请成功 { printf("malloc error\n"); return 1; } strcpy(p,"aaa"); printf("p %s\n",p); // p=p+4; 因为要使用p指针释放空间,p需要指向堆空间开始的地址 //当内存使用完毕后,需要释放。 free(p); p =NULL; //printf("p %s\n",p); error return 0; } 内存泄漏:只申请内存,使用完毕后,没有释放内存,导致可使用空间越来越少#include <stdio.h> #include <stdlib.h> #include <string.h> char * fun() { //static char str[ ]="hello"; char *p = (char*)malloc(10); // 2000 if(NULL == p) { return NULL; } //p = "hello";// 100 ,不能改变指针的指向 strcpy(p,"hello"); return p; } int main() { char* p = fun(); printf("p %s\n",p); free(p); p=NULL; return 0; }
558

被折叠的 条评论
为什么被折叠?



