0

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

4

3 回答 3

3

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

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

于 2013-01-24T11:53:03.447 回答
1

通常,您仅受可用内存和系统寻址能力的限制。但是,在您的情况下,您要声明一个局部变量,该变量将在堆栈上分配。堆栈的容量可能要有限得多。

于 2013-01-24T11:52:20.250 回答
1

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

堆栈上的内存为 20000 * 20000 * 4 ~ 1.5 Gigs。

您可能应该改用malloc和动态分配。

于 2013-01-24T11:53:42.607 回答