【问题标题】:Segmentation fault Not happenign where it should [duplicate]分段错误不会发生在应该的地方[重复]
【发布时间】:2016-05-27 17:22:09
【问题描述】:

我已经复习了我的 C 编码并复习了几年前我做过的一些旧练习。我遇到了一种情况,我几乎 100% 确定它应该给出分段错误,但程序运行平稳并正确终止。为什么会这样?

#include <stdio.h>

int main(void){
    int vals[6] = {0,0,0,0,0,0};

    vals[8]++; //This should not be ok!!?

    printf("Done");
    return 0;
}

【问题讨论】:

  • 没有应该发生分段错误的地方。
  • 如何访问一个不存在的数组位置不是分段错误?
  • 这是未定义的行为,是否是分段错误取决于其他事情。哦,你的代码中没有vector,你可能在想c++
  • @iharob 该死的面向对象的语言把我的 C 搞乱了:p
  • @iharob:旧 K&R 使用术语“向量”来表示数组。

标签: c arrays segmentation-fault


【解决方案1】:

vals[8] 的行为是未定义

它相当于*(vals + 8),它取消引用数组边界之外的内存。

“分段错误”是可能发生的许多事情之一。编译器也可以吃掉你的猫。

【讨论】:

  • 哦,我想知道我的猫去哪儿了!
  • @iharob:你肯定从不使用未定义的结构 ;-)
  • 如果strcat的第一个参数是&amp;val[8],它会勒死你的猫。
  • OP 问题完全重复。
猜你喜欢
  • 1970-01-01
  • 2013-05-01
  • 2017-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-18
相关资源
最近更新 更多