|
10鱼币
问题现象:现象的话参见图片
堆栈信息(来源gdb 解析core文件)
Program terminated with signal SIGABRT, Aborted.
#0 0x00007f824574518b in raise () from /lib/x86_64-linux-gnu/libc.so.6
[Current thread is 1 (Thread 0x7f82414bda80 (LWP 26702))]
b(gdb) bt
#0 0x00007f824574518b in raise () at /lib/x86_64-linux-gnu/libc.so.6
#1 0x00007f8245724859 in abort () at /lib/x86_64-linux-gnu/libc.so.6
#2 0x00007f824578f3ee in () at /lib/x86_64-linux-gnu/libc.so.6
#3 0x00007f824579747c in () at /lib/x86_64-linux-gnu/libc.so.6
#4 0x00007f8245797af7 in () at /lib/x86_64-linux-gnu/libc.so.6
#5 0x00007f824579a773 in () at /lib/x86_64-linux-gnu/libc.so.6
#6 0x00007f824579c419 in malloc () at /lib/x86_64-linux-gnu/libc.so.6
#7 0x00007f824599dc29 in operator new(unsigned long) ()
at /lib/x86_64-linux-gnu/libstdc++.so.6
#8 0x00007f824808f252 in CreateEvent(tagSECURITY_ATTRIBUTES*, int, int, char const*) (lpEventAttributes=0x0, bManualReset=1, bInitialState=0, lpName=0x0)
at WinEvent.cpp:29
#9 0x00007f82477f8b39 in CSCNamedPipeClt::SendMsgAndReceive(void const*, unsigned long, void**, unsigned long*, int) (this=
0x56166d2a1a00, pBuf=0x56166df36000, bufSize=44, ppOutBuf=0x7ffcaca85e98, pOutBufSize=0x7ffcaca85ea0, nTimeOut=60000) at SCNamedPipeClt.cpp:303
#10 0x00007f82477e844d in CSCNamedPipeCltMgr::SendAndReceive(unsigned long, void const*, unsigned long, void**, unsigned long*, int)
(this=0x7f8247833c40 <g_cltMgr>, cltID=0, pBuf=0x56166df36000, size=44, ppOutBuf=0x7ffcaca85e98, pOutBufSize=0x7ffcaca85ea0, nTimeOut=60000)
at SCNamedPipeMgr.cpp:254
#11 0x00007f82477e2c5b in SCNPClt_SendAndReceive(unsigned long, void const*, unsigned long, void**, unsigned long*, int)
--Type <RET> for more, q to quit, c to continue without paging--
(cltID=0, pBuf=0x56166df36000, bufSize=44, ppOutBuf=0x7ffcaca85e98, pOutBufSize=0x7ffcaca85ea0, nTimeOut=60000) at SCNamedPipe.cpp:45
#12 0x00007f8243e958a3 in CNPClt::SendAndReceive(void const*, unsigned int, void**, unsigned long*)
(this=0x56166d28ab40, pBuf=0x56166df36000, bufSize=44, ppOutBuf=0x7ffcaca85e98, pOutBufSize=0x7ffcaca85ea0) at NPClt.cpp:71
按照堆栈的信息找到对应的代码,就是一个普通的new操作
EVENT* pEvent= new EVENT();
EVENT定义如下:
typedef struct tagEvent{
本帖最后由 jackz007 于 2022-10-21 18:39 编辑
如果连自己都不知道应该怀疑哪些环节,那这个问题恐怕就没有解决的可能了。
一般灾难性的后果不应该出在内存分配过程本身,而是应该出在通过野指针对内存的访问。当通过 new 语句分配内存不成功的时候,拿到的指针值就是 NULL,如果不加判断就投入使用,就会直接导致灾难的发生,我想,如果给每一个指针都添加上使用前判断,那么,应该就可以杜绝绝大多数程序崩溃的事情发生。
|
最佳答案
查看完整内容
如果连自己都不知道应该怀疑哪些环节,那这个问题恐怕就没有解决的可能了。
一般灾难性的后果不应该出在内存分配过程本身,而是应该出在通过野指针对内存的访问。当通过 new 语句分配内存不成功的时候,拿到的指针值就是 NULL,如果不加判断就投入使用,就会直接导致灾难的发生,我想,如果给每一个指针都添加上使用前判断,那么,应该就可以杜绝绝大多数程序崩溃的事情发生。
|