0

ここにコードを貼り付けました:http://pastebin.com/tPvRHrkW コンパイル済みgcc。コンパイラに対して大きすぎる構造体を定義したため、エラーが発生したようです。構造体を別の単一のソースファイルに取り出してテストしましたが、今回はエラーは発生しませんでした。では、なぜSIGSEGVを取得するのですか?構造体のサイズに制限はありますか?

4

3 に答える 3

3

構造体のサイズに制限はありません。問題は、構造体の使用方法にあります。MGraph巨大な構造タイプであり、2 つの場所で、スタックに配置する方法で使用しています。1 つは関数のパラメーターとして、もう 1 つはローカル変数として。スタック スペースは、多くの場合、巨大な割合に拡大することが許可されているものではありません。

2 つの変更を提案します。まず、このタイプのインスタンスには動的割り当てを使用します。次に、実際のデータではなく、ポインターをパラメーターとして渡します。

于 2013-01-24T11:53:03.447 に答える
1

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

is 20000 * 20000 * 4 ~ 1.5 Gigs of memory on stack.

You should probably use malloc & dynamically allocate instead.

于 2013-01-24T11:53:42.607 に答える
1

一般に、使用可能なメモリとシステムのアドレス指定機能によってのみ制限されます。ただし、あなたの場合、スタックに割り当てられるローカル変数を宣言しています。スタックは、容量がはるかに制限されている可能性があります。

于 2013-01-24T11:52:20.250 に答える