C语言编程时使用MALLOC后一直没有用FREE函数释放内存空间怎么办
而且之後就运行不了了,即使加上free!啊啊啊……我之前大意地忘记free了发现后,修改了,加上free和null还是会出现Thismaybeduetoacorrupti...
而且之後就运行不了了,即使加上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了
发现后,修改了,加上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是不是无法挽回了??
希望能帮助解答此问题,谢谢! 展开
4个回答
展开全部
如果不适用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;}
展开全部
你这里程序有问题:
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);}分配空间了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
正如 杨小丢Summer 所说 你已经改变了指针的指向 再想free原来申请的空间已经不可能了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
程序结束的时候操作系统会帮你把申请的存储空间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;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询