23
回答
c++一个线程里面new的内存到另一个线程去释放,为什么会出错
极速云服务器,低至1.04元/天>>>   
c++一个线程里面new的内存到另一个线程去释放,为什么会出错
<无标签>
举报
撸红薯
发帖于4年前 23回/3K+阅
共有23个答案 最后回答: 4年前

常见的一种错误是这样:

p = new int [n]; //分配好内存;

*p = xx; //赋值(使用);

p++;

....


delete p; //p已经移动了,已经不是原始的指针,所以释放会出错。

--- 共有 4 条评论 ---
明月惊鹊日x,又打漏了一个 *号 4年前 回复
明月惊鹊回复 @ren谈 : 事先要准备多一个指针来指向首地址。 比如 char *p1, p2; p1 = new char[n]; p2 = p1; p2++; delete []p1; //p1一直都不能改变。 4年前 回复
nullptr你的这个那应该怎么释放?只能让他自动回收了? 4年前 回复
明月惊鹊delete [ ] p; 4年前 回复
我建议多写一成函数封装 new和delete,用log打印出new 和 delete的地方。 最好加上计数器~  即 new 次+1  delete -1, 不过 最好的办法还是 使用打印出log ~  看看 第一释放在哪里。  

引用来自“明月惊鹊”的答案

一般用new不会出错的,如果是微软的COM对象就不同。

检查你的代码吧。看看是不是溢出了?

这是一道面试题考察的是私有堆的问题

引用来自“云松”的答案

我建议多写一成函数封装 new和delete,用log打印出new 和 delete的地方。 最好加上计数器~  即 new 次+1  delete -1, 不过 最好的办法还是 使用打印出log ~  看看 第一释放在哪里。  
这是一道面试题
顶部