1

配列を次のように宣言しているときにセグメンテーション違反が発生したとき、私は問題を抱えていました。

long long ways[max+1];  

どこ、

unsigned int max = findMax(l,T); // l is an unsigned int array and T is an int.  

また、findMax は次のタイプの関数です。

unsigned int findMax(unsigned int arr[],int size)  

どうすればこれを解決できますか?

4

1 に答える 1

3

考えられる理由は、配列がスタックに対して大きすぎることです。

現在の一般的なスタック サイズは 1 ~ 16 Mb です (組み込みシステムではこれよりもかなり小さい可能性があります)。が 8 バイトの場合long long、125000 を超える要素の 1 つの配列を割り当てると問題が発生する可能性があることを意味します。また、他の自動変数のための余地も残したいと考えています。

非常に大きな配列をスタックに割り当てるべきではありません。

代わりにヒープに割り当ててみることもできます:

long long *ways = calloc(max+1, sizeof *ways);
if (ways == NULL) {
    // allocation failed!!
}
// Do stuff.
free(ways);
于 2014-12-19T12:30:39.140 に答える