0

Xcode 内での C でのプログラミングに問題があることに気付きました。以下で定義された次元でこれら 3 つの配列を割り当てようとすると、次のようになります。

#define MAX_NUM_VALID 12000
#define ALT_MAX       200000

{
...
double            l_adYMLinkedData[MAX_NUM_STAR_VALID + ALT_MAX][1];
double            l_adZMLinkedData[MAX_NUM_STAR_VALID + ALT_MAX][1];
double            l_adMLinkedData[MAX_NUM_STAR_VALID + ALT_MAX][1];
...
}

Xcode は実行時に次のようなエラーを返します。

EXC_BAD_ACCESS (code=2, address:.....)

理由がわかりません。これらの次元 (つまり、100 と 100) を制限すると、すべてうまくいきます。

何か案が?

4

2 に答える 2

0

これは、スタックに置こうとする非常に多くのものです (比較的限られたリソースになる傾向があります)。

次のような動的割り当てを試してみてくださいmalloc

double *l_adYMLinkedData = malloc ((MAX_NUM_STAR_VALID+ALT_MAX)*sizeof(double));
// check and use it
free (l_adYMLinkedData);

それは事実上同じことをあなたに与えます。などのポインター/配列の違いに関係する微妙な違いがありますsizeofが、インデックス作成だけを行っている場合、通常は影響しません。

于 2013-09-03T13:37:22.087 に答える
0

通常、スタック領域は制限されています (Visual Studio の場合、デフォルトで 4 MB)。各配列は約 1.6 MB を使用し、さらに割り当てようとすると、スタックはスペースを使い果たします。

代わりにヒープに割り当て、後で解放してメモリ リークを回避します。

于 2013-09-03T13:38:34.337 に答える