2013-01-24 32 views
0

我在这里粘贴我的代码:http://pastebin.com/tPvRHrkWgcc编译。 看来发生错误是因为我为编译器定义了一个太大的结构。我把这个结构放到另一个源文件中进行测试,这次没有发生错误。那么为什么我会得到SIGSEGV,并且对结构的大小有任何限制?c - 为什么我会得到这个SIGSEGV?我怎么知道一个结构可以得到多少内存?

+0

哪里它赛格故障?你是否通过调试器运行它? – Joe

回答

3

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

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

1

通常,您只受可用内存和系统寻址能力的限制。但是在你的情况下,你声明了一个局部变量,它将被分配到堆栈上。这个堆栈的容量可能会受限得多。

+0

我尝试了一个更大的数组,它仍然有效。这里似乎没有限制。 – CDT

1

#define MAXV 20000 .. int edges[MAXV][MAXV];

是堆栈的存储器20000 * 20000 * 4〜1.5演出。

你应该使用malloc &动态分配来代替。

+0

我从来没有想过会花费太多的内存〜谢谢〜 – CDT

相关问题