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

请问关于动态内存分配释放有关问题

2012-08-01 
请教关于动态内存分配释放问题比如char**pNULLint i0p(char**)malloc(5*sizeof(char*))for(i0i5

请教关于动态内存分配释放问题
比如
char**p=NULL;
int i=0;
p=(char**)malloc(5*sizeof(char*));
for(i=0;i<5;i++)
  *(p+i)=(char*)malloc(5*sizeof(char));
请问如果只free(p),p先不指向NULL,那是不是连带着第二次分配的内存也释放了?如果没释放的话,那是否还可以用p来引用内存中的数据?

[解决办法]
char**p=NULL;
int i=0;
p=(char**)malloc(5*sizeof(char*)); (1)
for(i=0;i<5;i++)
*(p+i)=(char*)malloc(5*sizeof(char)); (2)

free(p)释放的是(1)处分配的内存,第二次(2)分配的内存实际并没有释放掉,之所以无法使用p来引用是因为释放掉第一次分配的内存后,无法获取第二次分配的内存的地址。

楼主可以像定义p一样重新定义一个q并为其分配空间,在(2)处将同样的地址值也用q指向的空间保存,这样在free(p)后通过q来调用可以测试出是否释放了第二次分配的内存

热点排行