【问题标题】:Segmentation fault when declaring variable inside struct在结构内声明变量时出现分段错误
【发布时间】:2013-04-01 18:08:29
【问题描述】:

我最近在开发应用程序时遇到了一个非常奇怪的段错误。基本上,如果我将另一个变量添加到我的一个结构中,则在执行时会导致段错误,没有明显的原因。删除此变量可立即解决问题。结构如下:

typedef struct Note {
    char cNote;
    unsigned int uiDuration;
    unsigned int uiVelocity;
};

只要我添加一个

long lStartTime;

结构中任何位置的变量,代码照常编译,但会引发分段错误。 GDB 的回溯在我什至不使用的一些不起眼的 WIN 方法中丢失了。

有什么想法吗?

谢谢!

【问题讨论】:

  • 您在某处有未定义的行为。添加此成员只是使其更加明显。您是否做过与Notes 相关的任何涉及手动内存管理或访问数组的事情?开始寻找那里。
  • 在 Joseph 的评论中添加一点 - 很可能某些代码在内存管理或数组访问方面做了一些不利的事情,但与 Note 没有任何关系。未定义行为的乐趣之一是,当编辑完全不相关的代码时,症状可能会发生变化。

标签: c++ struct segmentation-fault


【解决方案1】:

我看到了几种可能的解释:

  1. 某处假定struct 具有一定的大小。改变尺寸会破坏事物。
  2. 您可能有某种内存错误,这是由于您更改内存中事物的布局而导致的。试试 valgrind 或 Purify 之类的工具。
  3. 您正在更改头文件中的struct,但未能重建所有使用struct 的源文件。

【讨论】:

  • 除了 valgrind,还有 Electric Fence 和(仅限 Windows)App Verifier。
  • 感谢大家的帮助,但我想通了。结果我在另一个类中静态分配了一个由Notes 组成的大数组。我应该动态地完成这个,因为程序的堆栈不足以容纳这么多Note 的实例。这很讽刺,因为向结构添加变量会导致堆栈溢出。应该看看网站标题,哈哈。
猜你喜欢
  • 1970-01-01
  • 2021-07-29
  • 1970-01-01
  • 1970-01-01
  • 2016-09-11
  • 2011-05-31
  • 2017-05-04
  • 1970-01-01
  • 2022-10-15
相关资源
最近更新 更多