C++ 在结构内声明变量时出现分段错误
我最近在开发应用程序时遇到了一个非常奇怪的错误。基本上,如果我将另一个变量添加到一个结构中,则在执行时会无明显原因地导致segfault。删除此变量可以立即解决问题。结构如下所示:C++ 在结构内声明变量时出现分段错误,c++,struct,segmentation-fault,C++,Struct,Segmentation Fault,我最近在开发应用程序时遇到了一个非常奇怪的错误。基本上,如果我将另一个变量添加到一个结构中,则在执行时会无明显原因地导致segfault。删除此变量可以立即解决问题。结构如下所示: typedef struct Note { char cNote; unsigned int uiDuration; unsigned int uiVelocity; }; 只要我添加一个 long lStartTime; 在结构中的任何位置都是变量,代码会像往常一样编译,但会抛出分段错误
typedef struct Note {
char cNote;
unsigned int uiDuration;
unsigned int uiVelocity;
};
只要我添加一个
long lStartTime;
在结构中的任何位置都是变量,代码会像往常一样编译,但会抛出分段错误。GDB的回溯在一些我甚至不用的晦涩的WIN方法中丢失了
有什么想法吗
谢谢 我看到了几种可能的解释:
struct
具有一定的大小。改变大小会破坏东西struct
,但无法重建使用struct
的所有源文件你在某处有未定义的行为。添加此成员只是使其更加明显。您是否做过任何与
注释
s有关的涉及手动内存管理或访问阵列的工作?开始看这里。给Joseph的评论添加一点内容-很可能有些代码在内存管理或数组访问方面做了一些不好的事情,但与注释
没有任何关系。未定义行为的乐趣之一是,当编辑完全不相关的代码时,症状可能会改变。除了valgrind,还有电子围栏和(仅限Windows)应用程序验证程序。谢谢大家的帮助,但我已经解决了。原来我在另一个类中静态分配了一个由Note
s组成的大型数组。我应该动态地这样做,因为程序的堆栈不够大,无法容纳如此多的Note
实例。这很讽刺,因为向结构添加变量会导致堆栈溢出。只是应该看看网站的标题,哈哈。