2

我的程序出现分段错误,我使用 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实际上不会在那里发生。我必须补充一点,我很确定我的一些类可能会导致问题,因为它们不是线程安全的(例如:没有互斥锁)。

4

0 回答 0