而且之後就运行不了了,即使加上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是不是无法挽回了??
希望能帮助解答此问题,谢谢!
补充了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住