大きな4D行列を割り当てようとしていますが、私は動的にそれをやりたいのです。静的な行列を作成するだけで、すべてが正常に動作するので、今は十分なメモリがあることがわかります。しかし、同じことを動的に実装しようとすると、3次元に入るたびに壊れてしまい、4番目にする必要があります。誰でもこのコードがうまくいかない理由を教えてもらえますか?4Dアレイを割り当てるときにセグメンテーションフォルト(コアダンプ)が発生するのはなぜですか?
#include <iostream>
using namespace std;
static const int time1 = 7;
static const int tlat = 15;
static const int tlon = 17;
static const int outlev = 3;
int main(void)
{
//allocate four dimensional dataIn
int ****dataIn;
dataIn = new int ***[time1];
if (dataIn == NULL) { return 1; }
for(int i = 0 ; i < time1 ; i++) {
dataIn[i] = new int **[tlat];
if (dataIn[i] == NULL) { return 1; }
for(int j = 0 ; j < tlat ; j++) {
dataIn[i][j] = new int *[tlon];
if (dataIn[i][j] == NULL) { return 1; }
for(int k = 0 ; k < tlon ; k++) {
dataIn[i][j][k] = new int[outlev];
if (dataIn[i][j][k] == NULL) { return 1; }
}
}
}
//there is more code that happens here to add values to dataIn
//and eventually output it but I know all of that works
return 0;
}
このコードではさまざまなバリエーションを試していますが、新しいものではなくmallocを使用しましたが、動作させることはできません。どんな助けでも大歓迎です。
ここではクラッシュしません。実際の*コードブロックが役立つかもしれません。 – dirkgently
投稿したコードをコンパイルしましたが、VS2005でクラッシュすることなく実行されました。あなたの問題がより具体的であるようにしてください。 –
以下のコメントでは、エラーが 'dataIn [i] [j] ='の行にあることを示します。 iとjの値は?返されるポインタの値はどれくらいですか?デバッガ(grokには難しい)がない場合は、状態を示すprintステートメントを置くことで古い方法で行うことができます。 –