代码如下:
if (chan->sampcnt < 8)
{
*data = 0;
return;
}
chan
包含指向有效结构的指针。在调试器中,列出的`chan->sampcnt
值为-3
。不知何故,它不会将条件解析为 false 并在 if 语句的范围内执行代码。这种情况很少见,但它构成了一个主要错误。
sampcnt
的默认值 ,-3
多次运行此条件。它几乎总是能正确解决,但当它没有解决时,事情会很快变得丑陋。到底发生了什么?我说不出话来。我以前从未遇到过这样的事情。提前致谢。
更新(鼓励重新开放):
struct channel_struct
{
channel_struct()
{}
u32 num;
u8 vol;
u8 datashift;
u8 hold;
u8 pan;
u8 waveduty;
u8 repeat;
u8 format;
u8 keyon;
u8 status;
u32 addr;
u16 timer;
u16 loopstart;
u32 length;
u32 totlength;
double double_totlength_shifted;
double sampcnt;
double sampinc;
// ADPCM specific
u32 lastsampcnt;
s16 pcm16b, pcm16b_last;
s16 loop_pcm16b;
int index;
int loop_index;
u16 x;
s16 psgnoise_last;
};
这是一个多线程应用程序。我不熟悉所有代码,因为它是一个庞大而复杂的项目。我怀疑 sampcnt 在另一个线程中被更改,但是当错误发生时,它表现出令人震惊的规律性。这使我远离某种原子性打嗝;但是,这仍然是一个考虑因素。我还没有确定修改chan->sampcnt
在另一个线程中运行的代码,但它可能就在那里。
只是要清楚。 sampcnt
是双类型的,我敢肯定。它被声明为双精度,调试器将其列为双精度。此外, chan 是指向 type 的指针struct channel_struct
。