首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

循环体内指针的分配与释放有关问题?

2012-03-25 
循环体内指针的分配与释放问题?!for(i0i 3i+){spcalloc(1,size).....free(sp)spNULL}//free(sp)

循环体内指针的分配与释放问题?!


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不起作用

热点排行