c - 为什么我得到这个 SIGSEGV?我怎么知道一个结构可以获得多少内存?

标签 c

<分区>

我在这里粘贴了我的代码:http://pastebin.com/tPvRHrkW 使用 gcc 编译。 似乎错误发生是因为我定义了一个对于编译器来说太大的结构。我将结构体取出到另一个单个源文件中并进行了测试,这次没有发生错误。那么,为什么我会收到 SIGSEGV,结构的大小是否有任何限制?

最佳答案

结构的大小没有限制,问题在于您如何使用它。 MGraph 是巨大的结构类型,在两个地方,您以将其放置在堆栈上的方式使用它;一次作为函数的参数,一次作为局部变量。堆栈空间通常不允许增长到很大的比例。

我建议进行两处更改。首先,对这种类型的实例使用动态分配。其次,将指针作为参数传递给它,而不是实际数据。

关于c - 为什么我得到这个 SIGSEGV?我怎么知道一个结构可以获得多少内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14500682/

相关文章:

c - 追踪 cuda 内核寄存器的使用

c - 我如何在家练习C编程

python - 无论位置如何,如何解析配置文件中的参数?

c - C 中各种字符串初始化的大小差异

java - 将具有多个结构的 C 头文件转换为 Java

关于设置第 32 位的编译器警告

C 指针问题

当数据复制/扫描/读取到未初始化的指针时崩溃或 "segmentation fault"

c - 在 C 中使用 strcpy() 和复制 char* 的地址之间的区别

c - 当尝试除两个 float 时,Xcode 会自动转到 lldb