我的程序中出现了分段错误,我使用GDB进行调试。以下是我在GDB中的回溯:
#0 __memcpy_ssse3_back () at ../sysdeps/x86_64/multiarch/memcpy-ssse3-back.S:199
#1 0x00007f054885b6ef in ViSpectrumAnalyzer::run (this=0x991e98) at vispectrumanalyzer.cpp:66
#2 0x00007f05488573e8 in ViProcessorList::manipulateInput (this=0x991b00, data=0xdf2c30) at viprocessorlist.cpp:64
#3 0x00007f0548852a3b in ViMultiExecutor::runNotify (this=0x991ab0) at vimultiexecutor.cpp:34
#4 0x00007f0548855f9d in ViExecutor::connect (this=0xc104ca031a0, processor=0x1059f0) at viexecutor.cpp:227
#5 0x00007f054c416cd8 in QThreadPrivate::start(void*) () from libQtCore.so.5
#6 0x00007f054a35ae9a in start_thread (arg=0x7f0530e4a700) at pthread_create.c:308
#7 0x00007f054bbb34bd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112
#8 0x0000000000000000 in ?? ()
如果我测试我的程序,则回溯#1始终处于ViSpectrumAnalyzer的运行功能中。但它总是在不同的地方(+ - 5行)。我现在的问题是:上面的回溯实际上是否表明SegFault发生在ViSpectrumAnalyzer :: run()中.backtrace#0提到了memcpy,后来我使用了几行(但不是第66行)。在上面的例子中,第66行是一个声明:
int size = windowSize - bufferSize;
使用windowSize和bufferSize两个整数。所以我不认为SegFault实际上可以在那里发生。我必须补充一点,我很确定我的一些类可能会导致问题,因为它们不是线程安全的(例如:no mutex)。