【问题标题】:C++ - Segmentation fault when declaring and initializing an intC++ - 声明和初始化 int 时出现分段错误
【发布时间】:2016-06-03 12:47:40
【问题描述】:

我注意到,每当我声明或初始化 int c = 0 时,我似乎都会遇到分段错误。只有当我注释掉我的代码的那一行时,它才能正常工作。这是我的代码的一部分:

int a = 0;
int b = 0;
int c = 0;

struct alphabet{
     int first;
     char word[30];
};

我仅使用 ab 作为我唯一的整数测试了我的代码。一旦我稍后尝试初始化c,它才开始给我分段错误。我只是不明白为什么会发生这种情况。有人可以帮我吗?

提前谢谢你!

【问题讨论】:

  • 问题出在您没有发布的代码中。请发帖MCVE
  • 代码的另一部分存在缺陷,它覆盖了一些内存。添加c 会导致内存中的布局发生变化,并在导致崩溃而不是您没有注意到的地方进行覆盖。
  • 使用调试器找出在哪里发生段错误。这可能会给你一个关于正在发生的事情的提示。

标签: c++ segmentation-fault int


【解决方案1】:

由于您发布的代码非常简短,因此很难为您提供具体建议。但是,让我们尝试一下“平均”情况。所有三个int 变量都位于堆栈帧中。因此,添加更多变量,如c,您可以移动其余堆栈变量的位置,这些变量可能稍后定义。特别是,如果您实例化结构 alphabet 的实例,该实例具有数组字段 word。想象一下,如果你运行它(超出对数组左边界的边界访问)会发生什么。如果此欠载与c 所在的区域重叠,并且您通过初始化c 对其进行写入,则word 上的潜在字符串操作可能会崩溃。因此,我的建议是从 this 函数开始进行代码审查。重点是使用未初始化的变量、越界访问和与堆栈变量相关的悬挂指针。一个好的做法是使用一些静态代码分析工具。有关更具体的提示,您需要扩展您的问题以提供更多详细信息,如上述 cmets 中所建议的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 2013-10-04
    相关资源
    最近更新 更多