プログラムでセグメンテーション違反が発生し、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で発生することを実際に示していますか?上記の例では、66行目は次のステートメントです。
int size = windowSize - bufferSize;
windowSizeとbufferSizeは両方とも整数です。したがって、SegFaultが実際にそこで発生する可能性はないと思います。一部のクラスはスレッドセーフではないため(例:ミューテックスなし)、問題が発生する可能性があることを付け加えなければなりません。