C语言编程时使用MALLOC后一直没有用FREE函数释放内存空间怎么办

而且之後就运行不了了,即使加上free!啊啊啊……
我之前大意地忘记free了
发现后,修改了,加上free和null 还是会出现
This may be due to a corruption of the heap, which indicates a bug in assign
我再做修改後还是会在debug的时候卡掉,不知道是为什麽,网上查了下,可能因为野指针?
我的主程序:
int main(){
int i;
struct card Card[80];
struct card *pcard;
pcard = (struct card *)malloc( sizeof(struct card));
if (pcard == NULL){
exit(0);
}
pcard = Card;
。。。

free(pcard);
pcard=NULL;
return 0;
}
好担心是不是电脑坏了。。。之前没有free和设置成null是不是无法挽回了??
希望能帮助解答此问题,谢谢!

如果不适用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个回答  2013-05-01
你这里程序有问题:
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个回答  2013-05-02
正如 杨小丢Summer 所说 你已经改变了指针的指向 再想free原来申请的空间已经不可能了
第3个回答  2013-05-01
程序结束的时候操作系统会帮你把申请的存储空间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住

本回答被提问者采纳
相似回答