当前位置: 技术问答>linux和unix
C语言 结构体动态数组内存释放问题
来源: 互联网 发布时间:2016-05-14
本文导语: 大家好,再发怪异一贴,请帮我研究一下,为什么我这个动态数组无法释放 /* 声明了结构体 */ typedef struct _Planmodel Planmodel; struct _Planmodel { const char *title; const char *resume; }; main(){ int nrow = 5 ...
大家好,再发怪异一贴,请帮我研究一下,为什么我这个动态数组无法释放
*** glibc detected *** /home/shizhe/workspace/missmoblin/Debug/missmoblin: free(): invalid pointer: 0x0842e560 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6[0xb777aa85]
………………………………
/* 声明了结构体 */
typedef struct _Planmodel Planmodel;
struct _Planmodel {
const char *title;
const char *resume;
};
main(){
int nrow = 5
Planmodel *stData = (Planmodel *)malloc(sizeof(Planmodel) + nrow +1);
for(i = 0; i title = "test";
stData->resume = "test";
stData += sizeof(Planmodel);
}
free(stData);//这里出错,提示一堆错误信息。
}
*** glibc detected *** /home/shizhe/workspace/missmoblin/Debug/missmoblin: free(): invalid pointer: 0x0842e560 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6[0xb777aa85]
………………………………
|
错误太多了
main(){
int nrow = 5;
Planmodel *p;
Planmodel *stData = (Planmodel *)malloc(sizeof(Planmodel) * nrow ); // 这里好像要改
if (stData == NULL)
{ printf("..."); return 1;/* 一定要养成这个习惯,虽然大多数情况没用 */ }
p = stData;
for(i = 0; i title = "test";
p->resume = "test";
p++; // 注意这里
}
free(stData);//这里出错,提示一堆错误信息。
}
|
1.Planmodel *stData是指向你Planmodel 结构的指针
而你分配的空间其实是一个Planmodel 结构数组的指针
这中间有问题
最好一个个申请,一个一个释放
stData->title 未初始化或者说指针未分配空间
而你分配的空间其实是一个Planmodel 结构数组的指针
这中间有问题
最好一个个申请,一个一个释放
stData->title 未初始化或者说指针未分配空间