我使用该类时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*,这可以导致上述的问题。
在多线程间传递了CSocket*,CAsyncSocket*,这可以导致上述的问题。
#6
上述的问题,在调试版本中应该会出现一个断言
http://support.microsoft.com/default.aspx?scid=kb;en-us;175668
http://support.microsoft.com/default.aspx?scid=kb;en-us;175668
#7
可能是你的CMsgCom 里面的内存管理或指针没有管理好。
你可以跟踪到其析构函数里面查看一下。
或者你把你的CMsgCom 贴出来大家看一下。
你可以跟踪到其析构函数里面查看一下。
或者你把你的CMsgCom 贴出来大家看一下。
#8
该类直接用socket.h的,没用MFC封装以后的CSocket等,因为我知道MFC的socket不能直接在多线程中使用,所以我想与socket无关,后来我发现确实无关,因为产生此错误的原因是还没等子线程正常退出就delete cmd了,因此,我在适应的地主sleep就可以了。
还有我后面提的问题:如果在该类的内部不作某此清理,如内部有指针对象没delete的话,在外面直接delete cmd会出错吗?(
虽然从实践中知道怎么回事,但理论上是什么啊?书本上也没看到。
还有我后面提的问题:如果在该类的内部不作某此清理,如内部有指针对象没delete的话,在外面直接delete cmd会出错吗?(
虽然从实践中知道怎么回事,但理论上是什么啊?书本上也没看到。
#9
cmd 的内存区域可能正被别人用着呢。
#10
cmd 的内存区域可能正被别的地方用着呢。
#11
学习ing
#1
CMsgCom类的析构函数中可能有错误。
#2
检查一下析构函数
#3
delete失败是会抛出异常的。
#4
在debug情况下,如果有溢出,delete会出错。
你第二个问题,是不会报错的,当然有泄露了。
你第二个问题,是不会报错的,当然有泄露了。
#5
其功能是socket通信的,有多线程等?
在多线程间传递了CSocket*,CAsyncSocket*,这可以导致上述的问题。
在多线程间传递了CSocket*,CAsyncSocket*,这可以导致上述的问题。
#6
上述的问题,在调试版本中应该会出现一个断言
http://support.microsoft.com/default.aspx?scid=kb;en-us;175668
http://support.microsoft.com/default.aspx?scid=kb;en-us;175668
#7
可能是你的CMsgCom 里面的内存管理或指针没有管理好。
你可以跟踪到其析构函数里面查看一下。
或者你把你的CMsgCom 贴出来大家看一下。
你可以跟踪到其析构函数里面查看一下。
或者你把你的CMsgCom 贴出来大家看一下。
#8
该类直接用socket.h的,没用MFC封装以后的CSocket等,因为我知道MFC的socket不能直接在多线程中使用,所以我想与socket无关,后来我发现确实无关,因为产生此错误的原因是还没等子线程正常退出就delete cmd了,因此,我在适应的地主sleep就可以了。
还有我后面提的问题:如果在该类的内部不作某此清理,如内部有指针对象没delete的话,在外面直接delete cmd会出错吗?(
虽然从实践中知道怎么回事,但理论上是什么啊?书本上也没看到。
还有我后面提的问题:如果在该类的内部不作某此清理,如内部有指针对象没delete的话,在外面直接delete cmd会出错吗?(
虽然从实践中知道怎么回事,但理论上是什么啊?书本上也没看到。
#9
cmd 的内存区域可能正被别人用着呢。
#10
cmd 的内存区域可能正被别的地方用着呢。
#11
学习ing