C++ - 声明和初始化 int 时出现分段错误

C++ - Segmentation fault when declaring and initializing an int

本文关键字:分段 错误 int 声明 初始化 C++      更新时间:2023-10-16

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

int a = 0;
int b = 0;
int c = 0;
struct alphabet{
     int first;
     char word[30];
};

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

提前谢谢你!

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