循环体内指针的分配与释放问题?!
for (i=0;i <3;i+){
sp = calloc(1,size);
.....
free(sp);
sp = NULL;
}
//free(sp);
为什么运行的时候会出错呢?释放和分配不是应该一一对应吗?如果不在循环体里面释放,而在循环体外释放(注释的位置)运行时不会出错,但是calloc和free没有对应,也不对吧(内存泄露了吧?)
[解决办法]
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *sp;
int i = 2;
sp = (int *)malloc(10);
sp = &i;
free(sp);//free(sp)篡改了动态内存区的内容。因为free(sp)之后,str成为了野指针,//导致下面的语句不起作用。
sp = NULL;
sp = (int *)malloc(10);
sp = &i;
printf ( "%d\n ", *sp);
return 0;
}
Top
回复人:comman_ndsc(每天都要程练 不练不行滴) ( 四级(中级)) 信誉:100 2007-08-20 10:23:55 得分:0
?
cceczjxy()
请把我上面的程序拿去调试一下。看是不是和我说的一样。
---------------------------------------------
兄弟,你看好你的程序了
sp = (int *)malloc(10);
sp = &i;
free(sp);//f
现在sp 指向的i,已经不是动态分配的那块地址了,当然不行了,这样不出错去才怪呢.
[解决办法]
恩,我明白的程序了。
但是我的回答还是一样的:free(sp)篡改了动态内存区的内容,后果难以预料,而且非常危险。因为free(sp)之后,str成为了野指针,导致str = NULL不起作用