析构函数的疑问

ermosky 2011-09-02 11:02:08
1. 我在list_t和node_t的类里面都在各自的析构函数里面printf信息,为什么程序运行的时候没有语句显示出来,难道没有调用我自己写的析构?
2. 如果我增加了
23 node = new node_t(100);
24 l->list_insert(node, 2);
程序就显示内存出错,提示两次释放空间;
但去掉 27 l->~list_t();后,程序又正常,就是没有析构的信息打印出来,请问是什么原因?


int main(void)
10 {
11 int i, n;
12 node_t *node;
13 srand(getpid());
14
15 list_t *l = new list_t(sizeof(int));
16 for(i = 0; i < 10; i++)
17 {
18 n = random() % 100;
19 node = new node_t(n);
20 l->list_append(node);
21 }
22 l->list_travel();
23 node = new node_t(100);
24 l->list_insert(node, 2);
25 l->list_travel();
26 //delete l;
27 l->~list_t();
28 return 1;
29 }
...全文
99 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
如果 list_t是你自己定义的话,那么估计错误在 l->list_insert(node, 2);
不妨贴出你的代码
帅得不敢出门 2011-09-02
  • 打赏
  • 举报
回复
delete l; 就可以了, 它会调用析构

可能是list_t 类内部的问题. 代码不正确.
jackyjkchen 2011-09-02
  • 打赏
  • 举报
回复
越界了,和两次释放是同一个提示

node = new node_t(100)你的本意是不是
node = new node_t[100]?
用中括号

23,114

社区成员

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

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