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
是双重类型,我相信。它被声明为double,调试器将其列为double。另外,chan是指向struct channel_struct
的指针。
我们需要看到的结构类型的定义'chan'了。了解一些关于你的程序的更多细节也是有帮助的,比如它是多线程的,周围的代码在做什么等等。我想知道你是否违反了别名规则,并用一个不同的重叠对象访问对象键入... –
具体来说,是什么类型的sampcnt? –
缺少OP添加更多信息,我倾向于支持投票结束...... –