今日、奇妙なエラーに遭遇しましたが、まだ理解できません:
long long N = 2000;
long long N2 = N*N;
long long *s = malloc(sizeof(long long)*N2); // create array
// populate it
for (long long k = 1; k <= 55; k++) {
エラーは発生しませんが、
long long N = 2000;
long long N2 = N*N;
long long s[4000000]; // create array
// populate it
for (long long k = 1; k <= 55; k++) {
別の 8 バイト変数を割り当てるスペースが残っていないかのように、(デバッガーによると) k に 1 を割り当てる前for
に、行にcode=2 EXC_BAD_ACCESS が表示されます。このコードはメソッドの先頭にあります。他の変数は割り当てられていません。4000000要素のlong long配列をスタックに割り当てることはできないと思いますが、どうにかして動的ヒープに割り当てることができます。誰かが何が起こっているのか、制限は何かなどを説明してもらえますか? これは、Mountain Lion、2GB RAM を実行する Mac 上の Objective-C です。long long は幅が 8 バイトであるため、配列は 32MB のみにする必要があります。なぜこれが問題になるのかわかりません。
ありがとうございました!
(ちなみに、詳細に見覚えがあるように見えるのは、これがプロジェクト オイラーの問題 149の私のソルバーの始まりだからです。私は既に問題を解決しているので、ここで解決策の詳細について言及することは避けました。)