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

时间:2013-01-24 11:48:59

标签: c

我在这里粘贴了我的代码:http://pastebin.com/tPvRHrkWgcc编译。 似乎发生了错误,因为我为编译器定义了一个太大的结构体。我把结构体转移到另一个单一的源文件中进行测试,这次没有发生错误。那么为什么我会得到SIGSEGV并且结构的大小有限制吗?

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

堆栈上有20000 * 20000 * 4~1.5 Gig的内存。

您应该使用malloc&相反,动态分配。