AIX:未知分段错误问题
AIX: Unknown Segmentation fault issue
当我在 AIX 上 运行 我的代码时,我遇到了一个未知的突然的分段错误。下面一行:
sourceSample +=value;
给出一个分段错误。这里的 sourceSample 是一个指向图像的指针。
我对上面的代码行做了一些修改,结果如下:
int *p = sourceSample; sourceSample = p + value;
分段错误仍然存在。
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 来删除所有优化,则汇编代码完全没问题并且没有分段错误。
当我在 AIX 上 运行 我的代码时,我遇到了一个未知的突然的分段错误。下面一行:
sourceSample +=value;
给出一个分段错误。这里的 sourceSample 是一个指向图像的指针。
我对上面的代码行做了一些修改,结果如下:
int *p = sourceSample; sourceSample = p + value;
分段错误仍然存在。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 来删除所有优化,则汇编代码完全没问题并且没有分段错误。