C ++ Destruct函数错误!

时间:2011-04-26 06:51:04

标签: c++

我编写了一个无法正常工作的程序。问题在于,当我破坏指针时,它会出错。

代码如下:

if(pImage)
    delete pImage;

但如果我使用此代码,它可以正常工作。

    if(!pImage)
    delete pImage;
你可以解释原因吗?谢谢!

4 个答案:

答案 0 :(得分:1)

第二个例子肯定不会正常工作 - 至少不是你想要的正确形式 如果pImage是任何非零值,则不会执行delete语句。它可以编译和工作正常,但你正在泄漏内存(可能还有其他资源)。您的问题很可能是双重删除,也就是删除指针两次。

答案 1 :(得分:0)

因为您没有更改pImage。这就是为什么。 pImage仍指向某个地方,但现在它所指向的记忆已被破坏。

答案 2 :(得分:0)

你的第一个版本 如果(pImage)  删除pImage;

检查指针是否在那里。正如你所声明的那样,它会正常工作。声明它时应将其设置为NULL,即pImage = NULL;这样如果指针没有指向任何东西,该行将跳过。如果分配了某些东西,上面的行将(如果语句变为真)将dealloc给予它的内存。请记住,pImage需要一个动态分配的内存,删除后,它不应该被访问,否则会再次产生错误。

你的第二个版本 如果(!pImage) 删除pImage

在逻辑上是错误的。这意味着如果pImage不存在,请将其删除,以使此IF语句变为false。通过良好的实践,如果你将该指针设为NULL,那么它会在这里给你一个错误,因为它在逻辑上是错误的。 你的说法如果pImage不存在,删除它!!!!!!! 因此,当分配内存时,该行可能会跳过。

(真正的问题是你在声明它时应该总是设置 NULL 的指示符。你这样做,你的好处就去了。

答案 3 :(得分:0)

如果您使用 new 为pImage分配内存,则删除可能有效;但是如果你使用malloc()分配了内存,或者如果指针指向另一个未使用new分配的内存,那么在调用delete时你会遇到麻烦。

请首先回复一下如何为pImage分配内存。