delete 空指针的问题。很着急。希望解答下

hhxxttxs517 2011-08-01 10:01:23
std::vector<QueueItemBase*> m_Items;
for(size_t i=0; i<m_Items.size(); i++)
{
if( m_Items[i]->RequestId == item_id )
{
// 中身の削除
m_Items[i] = NULL;
delete m_Items[i];

m_Items.erase( m_Items.begin() + i );
found= true;
break;
}
}

程序结构就是上边这样。
m_Items[i] = NULL;
delete m_Items[i];
我这种写法会不会出些内存泄露。本来的代码里面没有m_Items[i] = NULL;但是我不加这个的话。第一次删除没有问题。但是第二次删除程序就死机了。我给m_Items[i] = NULL;写在delete m_Items[i];的下面程序也死机。只有写成
m_Items[i] = NULL;
delete m_Items[i];
程序没有事儿。所以问问各位高手。这样写安全么?会不会内存泄露。谢谢大家了。
...全文
248 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhxxttxs517 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 luciferisnotsatan 的回复:]

C/C++ code
m_Items[i] = NULL; // 为什么先把指针指向NULL,然后delete?
delete m_Items[i]; // 应该先delete,然后指向NULL
[/Quote]

原来的程序里面没有
m_Items[i] = NULL;
第一次delete的时候不死机。第二次进入这个函数的时候delete的时候会死机。
按你说的那样我尝试过了。但是死机
delete m_Items[i]; // 应该先delete,然后指向NULL
m_Items[i] = NULL; // 为什么先把指针指向NULL,然后delete?

所以我写成这样
m_Items[i] = NULL; // 为什么先把指针指向NULL,然后delete?
delete m_Items[i]; // 应该先delete,然后指向NULL
不死机。我就想问这样写会不会内存泄露或者引发其它问题。死机的原因是什么呢。哎。

hhxxttxs517 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 funniest 的回复:]

肯定有泄漏啊,先设成NULL,再delete有啥效果了?delete NULL是不会崩溃,但没啥用了。

另外,vector::earse后,会使所有的迭代器失效,因此,第二次delete会死机了。
[/Quote]

原来的代码没有m_Items[i] = NULL;
但是我不加上他程序就死机。

delete m_Items[i];
m_Items[i] = NULL;
这样也会死机。

只有
m_Items[i] = NULL;
delete m_Items[i];
程序不死机。今天交货。我都不知道怎么弄了。疯了。

还有一种办法就是 //delete m_Items[i];
但是里面数组的内容是new出来的。不delete肯定泄露。
大侠救命。
hhxxttxs517 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 luciferisnotsatan 的回复:]

delete NULL没有问题。delete里面会判断是不是NULL
[/Quote]

那我这么写回有泄露,或者其它问题么?
原来的代码没有m_Items[i] = NULL;
但是我不加上他程序就死机。加上了之后我就怕delete null之后会泄露。
luciferisnotsatan 2011-08-01
  • 打赏
  • 举报
回复
m_Items[i] = NULL;  // 为什么先把指针指向NULL,然后delete?
delete m_Items[i]; // 应该先delete,然后指向NULL
龙哥依旧 2011-08-01
  • 打赏
  • 举报
回复
判断m_Items[i] != NULL再delete
无趣 2011-08-01
  • 打赏
  • 举报
回复
肯定有泄漏啊,先设成NULL,再delete有啥效果了?delete NULL是不会崩溃,但没啥用了。

另外,vector::earse后,会使所有的迭代器失效,因此,第二次delete会死机了。
luciferisnotsatan 2011-08-01
  • 打赏
  • 举报
回复
delete NULL没有问题。delete里面会判断是不是NULL
qq69696698 2011-08-01
  • 打赏
  • 举报
回复
这不是泄漏问题吧,删除未知内存会导致系统崩溃的。

65,189

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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