在什么情况下,delete指针会失败?

时间:2022-11-04 20:56:49
我自定义了一个类(CMsgCom),其功能是socket通信的,有多线程等。

我使用该类时CMsgCom *cmd = new CMsgCom(this);
使用完后删除该指针,
但delete cmd;时出错,现象为:
User breakpoint called from code at 0x7c952583

请问这是什么原因?
还有,如果在该类的内部不作某此清理,如内部有指针对象没delete的话,在外面直接delete cmd会出错吗?(当然我在内部已经尽可能地清理了,只是想知道不清理会不会有后果?)

11 个解决方案

#1


CMsgCom类的析构函数中可能有错误。

#2


检查一下析构函数

#3


delete失败是会抛出异常的。

#4


在debug情况下,如果有溢出,delete会出错。

你第二个问题,是不会报错的,当然有泄露了。

#5


其功能是socket通信的,有多线程等?


在多线程间传递了CSocket*,CAsyncSocket*,这可以导致上述的问题。

#6


上述的问题,在调试版本中应该会出现一个断言


http://support.microsoft.com/default.aspx?scid=kb;en-us;175668

#7


可能是你的CMsgCom 里面的内存管理或指针没有管理好。

你可以跟踪到其析构函数里面查看一下。

或者你把你的CMsgCom 贴出来大家看一下。

#8


该类直接用socket.h的,没用MFC封装以后的CSocket等,因为我知道MFC的socket不能直接在多线程中使用,所以我想与socket无关,后来我发现确实无关,因为产生此错误的原因是还没等子线程正常退出就delete cmd了,因此,我在适应的地主sleep就可以了。

还有我后面提的问题:如果在该类的内部不作某此清理,如内部有指针对象没delete的话,在外面直接delete cmd会出错吗?(

虽然从实践中知道怎么回事,但理论上是什么啊?书本上也没看到。

#9


cmd 的内存区域可能正被别人用着呢。

#10


cmd 的内存区域可能正被别的地方用着呢。

#11


学习ing

#1


CMsgCom类的析构函数中可能有错误。

#2


检查一下析构函数

#3


delete失败是会抛出异常的。

#4


在debug情况下,如果有溢出,delete会出错。

你第二个问题,是不会报错的,当然有泄露了。

#5


其功能是socket通信的,有多线程等?


在多线程间传递了CSocket*,CAsyncSocket*,这可以导致上述的问题。

#6


上述的问题,在调试版本中应该会出现一个断言


http://support.microsoft.com/default.aspx?scid=kb;en-us;175668

#7


可能是你的CMsgCom 里面的内存管理或指针没有管理好。

你可以跟踪到其析构函数里面查看一下。

或者你把你的CMsgCom 贴出来大家看一下。

#8


该类直接用socket.h的,没用MFC封装以后的CSocket等,因为我知道MFC的socket不能直接在多线程中使用,所以我想与socket无关,后来我发现确实无关,因为产生此错误的原因是还没等子线程正常退出就delete cmd了,因此,我在适应的地主sleep就可以了。

还有我后面提的问题:如果在该类的内部不作某此清理,如内部有指针对象没delete的话,在外面直接delete cmd会出错吗?(

虽然从实践中知道怎么回事,但理论上是什么啊?书本上也没看到。

#9


cmd 的内存区域可能正被别人用着呢。

#10


cmd 的内存区域可能正被别的地方用着呢。

#11


学习ing