C语言 结构体动态数组内存释放问题

时哲 2008-10-24 09:44:35
大家好,再发怪异一贴,请帮我研究一下,为什么我这个动态数组无法释放


/* 声明了结构体 */
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 < nrow; i++){
stData->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]
………………………………
...全文
858 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
老衲不出家 2012-10-31
  • 打赏
  • 举报
回复
楼主最后改成啥样子啦
时哲 2008-10-24
  • 打赏
  • 举报
回复
感谢你们周五的晚上还不休息。刚才我已经按照brookmill的方法调试成功了。stData->title我定义的是const char*,应该不存在什么问题了吧。现在用得很爽哦。
xhs_lh04 2008-10-24
  • 打赏
  • 举报
回复
1.Planmodel *stData是指向你Planmodel 结构的指针
而你分配的空间其实是一个Planmodel 结构数组的指针
这中间有问题
最好一个个申请,一个一个释放

stData->title 未初始化或者说指针未分配空间
brookmill 2008-10-24
  • 打赏
  • 举报
回复
错误太多了
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 < nrow; i++){
p->title = "test";
p->resume = "test";
p++; // 注意这里
}
free(stData);//这里出错,提示一堆错误信息。
}
brookmill 2008-10-24
  • 打赏
  • 举报
回复
stData在for循环里被修改了
free的参数必须是由malloc分配得来,并且不能修改的,否则后果就不可预料了

23,124

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧