AIX:未知分段错误问题

时间:2017-01-08 05:02:39

标签: c++ segmentation-fault aix

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

sourceSample +=value;

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

我对上面的代码行做了一些更改,发生了以下情况:

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

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

  3. 任何人都可以告诉我为什么会这样吗?

    ps:这是我对StackOverflow的第一个问题,如果我错过任何事情,那么请原谅我。

1 个答案:

答案 0 :(得分:0)

我发现了问题的问题。 问题是因为在AIX中生成了错误的汇编代码。在添加'值'之后尝试访问sourceSample时发生分段错误。使用:

if(bitPos == bitPos_renew) {
    sourceSample += value;
}

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

'值'的价值使用以下方式分配:

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

分配给它的值应为1或-1但是当我们在汇编代码中看到分配给64位寄存器的值时,参考变量&#39; value&#39;是

  

00000000FFFFFFFF

而不是

  

FFFFFFFFFFFFFFFF(-1)

因此,当&#39;值&#39;添加到sourceSample,它开始指向一些未分配的内存导致分段错误。

当我尝试打印变量&#39; value&#39;的值时,汇编代码会自动变为正确并成功运行。

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