C语言编程时使用MALLOC后一直没有用FREE函数释放内存空间怎么办
答案:4 悬赏:30 手机版
解决时间 2021-01-19 12:19
- 提问者网友:自食苦果
- 2021-01-18 14:48
C语言编程时使用MALLOC后一直没有用FREE函数释放内存空间怎么办
最佳答案
- 五星知识达人网友:低音帝王
- 2021-01-18 16:15
如果不适用free释放内存,会造成内存泄露。随着程序的运行,程序所占内存越来越多,知道系统奔溃或者程序结束。
1、free函数:
原型:void free(void *ptr);
功能:释放malloc(或calloc、realloc)函数给指针变量分配的动态内存;
头文件:malloc.h或stdlib.h;
2、为了避免释放已经释放了内存的指针内存,或没有释放内存,在C语言中最好是在定义指针时赋初值NULL,释放后立即赋NULL,释放时检查指针值再决定释放就避免释放错误了,例如:
int *a = NULL
int *b = (int*) malloc(sizeof(int) * 10);
a= b;
if(a != NULL) {free(a);a=NULL;}
if(b != NULL) {free(b);b=NULL;}
1、free函数:
原型:void free(void *ptr);
功能:释放malloc(或calloc、realloc)函数给指针变量分配的动态内存;
头文件:malloc.h或stdlib.h;
2、为了避免释放已经释放了内存的指针内存,或没有释放内存,在C语言中最好是在定义指针时赋初值NULL,释放后立即赋NULL,释放时检查指针值再决定释放就避免释放错误了,例如:
int *a = NULL
int *b = (int*) malloc(sizeof(int) * 10);
a= b;
if(a != NULL) {free(a);a=NULL;}
if(b != NULL) {free(b);b=NULL;}
全部回答
- 1楼网友:轮獄道
- 2021-01-18 19:00
你这里程序有问题:
struct card Card[80];struct card *pcard;
这里Card[80]是数组,已经自动分配空间了;
如果需要指针pcard指向这个空间,直接pcard = Card;就可以了,
不用再pcard = (struct card *)malloc( sizeof(struct card));if (pcard == NULL){exit(0);}分配空间了
struct card Card[80];struct card *pcard;
这里Card[80]是数组,已经自动分配空间了;
如果需要指针pcard指向这个空间,直接pcard = Card;就可以了,
不用再pcard = (struct card *)malloc( sizeof(struct card));if (pcard == NULL){exit(0);}分配空间了
- 2楼网友:胯下狙击手
- 2021-01-18 18:22
正如 杨小丢Summer 所说 你已经改变了指针的指向 再想free原来申请的空间已经不可能了
- 3楼网友:笑迎怀羞
- 2021-01-18 17:50
程序结束的时候操作系统会帮你把申请的存储空间free了的....你贴一下问题吧,可能问题不是你说的地方吧我想追问补充了555求帮助谢谢!追答pcard = Card那句话有问题..你pcard指向card之前malloc的空间就相当于丢失了,无法再释放了。然后你pcard指向card后(我记得有的编译器你这句话都会报错),试图释放pcard就是试图释放card这个局部变量,所以就出错了。建议删去malloc和free那两句话:
int main(){
int i;
struct card Card[80];
struct card *pcard;
pcard = Card;
。。。
return 0;
}追问哦。。。谢谢!那什麼时候需要malloc呢??追答当你需要动态申请空间的时候就malloc啊...其实我一直觉得calloc方便点,因为它会帮你置零,还是举个例子吧,比如你需要建立一个数组来存储N个int信息,但是你不知道你的N是多大,就可以
int N;
从外设初始化N的数值
int * info = (int *)malloc(N*sizeof(int ));
...//使用info就和数组使用方式差不多
free(info);
然后我觉得吧,还有一点你能申请的局部变量远远没有malloc申请的多,意思就是
int a[500][500];绝对会报错
但是动态申请可以申请的非常之大,在内存空间允许的前提下都能hold住
int main(){
int i;
struct card Card[80];
struct card *pcard;
pcard = Card;
。。。
return 0;
}追问哦。。。谢谢!那什麼时候需要malloc呢??追答当你需要动态申请空间的时候就malloc啊...其实我一直觉得calloc方便点,因为它会帮你置零,还是举个例子吧,比如你需要建立一个数组来存储N个int信息,但是你不知道你的N是多大,就可以
int N;
从外设初始化N的数值
int * info = (int *)malloc(N*sizeof(int ));
...//使用info就和数组使用方式差不多
free(info);
然后我觉得吧,还有一点你能申请的局部变量远远没有malloc申请的多,意思就是
int a[500][500];绝对会报错
但是动态申请可以申请的非常之大,在内存空间允许的前提下都能hold住
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯