我编写了一个无法正常工作的程序。问题在于,当我破坏指针时,它会出错。
代码如下:
if(pImage)
delete pImage;
但如果我使用此代码,它可以正常工作。
if(!pImage)
delete pImage;
你可以解释原因吗?谢谢!
答案 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分配内存。