2013-01-24 59 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

相關問題