【发布时间】:2017-05-22 15:07:28
【问题描述】:
在 AIX 上运行我的代码时,我遇到了未知且突然的分段错误。以下行:
sourceSample +=value;
给出分段错误。这里的 sourceSample 是一个指向图像的指针。
我对上面的代码行做了一些修改,结果如下:
int *p = sourceSample; sourceSample = p + value;Segmentation 错误仍然存在。int **p = &sourceSample; sourceSample = *p + value;没有分段错误,代码执行成功。
谁能告诉我为什么会这样?
ps:这是我对 StackOverflow 的第一个问题,如果我遗漏了什么,请见谅。
【问题讨论】:
-
您错过的是发布您的代码的整个相关摘录,这使我们能够重现问题。另见:minimal reproducible example
-
您是否知道 (a) 原始源代码行试图做什么,以及 (b) 您所做的这些更改实际上是什么意思 以及它们有何不同?如果没有,我现在就告诉你:猜测不是你学习编程的方式。
-
在符合标准的 C++ 实现上运行的 C++ 程序出现分段错误的唯一方法是让该程序表现出未定义的行为。我们需要一个minimal reproducible example 来确定未定义的性质,但一个合理的可能性是
sourceSample + value将指向sourceSample指向的对象的边界之外。尝试计算这样的指针值足以产生未定义的行为;从技术上讲,您不需要取消引用结果。 -
整个相关代码摘录非常大,分配内存和使用内存的点非常不同。如果我尝试从整个代码库中发布一个简短的摘录,那将毫无意义。我知道没有代码摘录是不可能重现问题的,但我想问的不是为什么会出现这种分段错误,而是我的第二个更改是如何解决分段错误的?
-
@VarunKalra 但是我的第二个更改是如何解决分段错误的? -- 一些建议 -- 如果您知道您添加的代码“解决了问题”,并且代码本身与该问题无关,但不知何故,看似神奇地“修复了问题”,这清楚地表明了内存损坏。我建议删除神奇地解决问题的行,将错误放回程序中,然后真正解决问题。您所做的只是用无所事事的代码行来掩盖问题,这无法解决。
标签: c++ segmentation-fault aix