AIX:未知分段错误问题

AIX: Unknown Segmentation fault issue

当我在 AIX 上 运行 我的代码时,我遇到了一个未知的突然的分段错误。下面一行:

sourceSample +=value;

给出一个分段错误。这里的 sourceSample 是一个指向图像的指针。

我对上面的代码行做了一些修改,结果如下:

  1. int *p = sourceSample; sourceSample = p + value;分段错误仍然存​​在。

  2. int **p = &sourceSample; sourceSample = *p + value; 没有分段错误,代码执行成功。

谁能告诉我为什么会这样?

ps:这是我对 Whosebug 的第一个问题,如有遗漏请见谅。

我发现了问题所在。 问题是因为在 AIX 中生成了错误的汇编代码。在使用

添加 'value' 后尝试访问 sourceSample 时发生分段错误:
if(bitPos == bitPos_renew) {
    sourceSample += value;
}

当 'value' 添加到 sourceSample 指针并尝试访问 sourceSample 时,AIX 引发分段错误。这是因为变量 'value' 中的值错误。

'value' 的值分配使用:

value = sx <= ex ? 1 : -1;

分配给它的值应该是 1 或 -1 但是当我们在汇编代码中看到分配给引用变量 'value' 的 64 位寄存器的值是

00000000FFFFFFFF

而不是

FFFFFFFFFFFFFFFF(-1)

因此,当 'value' 添加到 sourceSample 时,它​​开始指向一些未分配的内存,导致分段错误。

当我尝试打印变量'value'的值时,汇编代码自动正确并成功运行。

这是因为编译器的优化。如果我通过将优化级别设置为 O0 来删除所有优化,则汇编代码完全没问题并且没有分段错误。