const int SLICE=2;
const int SIZE=256;
signed short int *matrix=new signed short int[SLICE][SIZE][SIZE];
for(int i=0; i<SLICE; i++){
for(int j=0; j<SIZE; j++){
for(int k=0; k<SIZE; k++){
fin.read((char*) &matrix[SLICE][SIZE][SIZE],sizeof(signed short int));
}
}
}
delete[] data;
三次元データを読み込むために、三次元配列を使って読み込もうとしたのですが、上手く読み込めません。
三行目の所で、error C2440: '初期化中' : 'short (*)[256][256]' から 'short *' に変換できません。
七行目の所で、error C2109: 配列または、ポインタでない変数に添字が使われました。
というエラーがでます。動的メモリの確保の仕方がまずいのでしょうか?
どなたか教えて頂けますでしょうか?よろしくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
> signed short int *matrix=new signed short int[SLICE][SIZE][SIZE];
エラーメッセージの通り、左辺の型がおかしい。(3次元配列なのに short * 型を使ってる。)
ちゃんと short (*)[256][256] 型の変数に代入しましょう。
signed short int (*matrix)[SIZE][SIZE] = new signed short int[SLICE][SIZE][SIZE];
あと、ループ内でmatrix[SLICE][SIZE][SIZE]を使ってるけど、これはメモリ確保されていないので使用できない領域です。
ここはi,j,kを使う所じゃないの?
それと最後のdelete[] data; の dataってどこにもないよ?
無事解決できました!
ありがとうございました。
まだ、エラーの意味を理解することも出来てない状態なので、
さらに勉強したいと思います。
あと、delete[] dataではなく、matrixの間違いでした。
No.1
- 回答日時:
newでの動的メモリ確保は多次元はサポートしていないと思われます(すいません、詳しくは調べてません)。
なので、1次元ずつメモリ確保をする必要があると思います。
二次元なら
int** a = new int*[2];
for (int i = 0; i < 2; ++i) a[i] = new int[5];
の様な感じですかね。三次元でも要領は同じです。
まぁC++なのでstd::vector使っておくのが無難だと思いますけどね。
あとは1次元で管理する方法もありますね。
const int SLICE=2;
const int SIZE=256;
int a[SLICE * SIZE];
// [1][5]なら
int val = a[SLICE * 1 + 5];
これをクラス化すれば使いやすくなるかもです。
以上参考になったら幸いです。
多分大丈夫だと思いますがどこか間違ってたらすいません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数から配列を返すには?
-
C#で構造体の配列を持った構造...
-
配列の要素数に変数を入れたい...
-
C言語において、 配列要素をひ...
-
C言語の配列のコピーについて
-
define で 配列
-
C++:構造体:newで入れ子:del...
-
c言語
-
int i, int i[1];
-
ポインタを使って構造体の配列...
-
[C++]const int と配列
-
MFCのCArrayを使った二次元配列
-
C#でのフィボナッチ数列
-
char gyou[1024];でcharの表現...
-
構造体のextern方法
-
2番目の最大値を求める
-
c言語の自分で数字を入力してサ...
-
C言語 ビットフィールドについて
-
MFC - ダイアログボックスのPic...
-
C言語から質問です。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
define で 配列
-
構造体のextern方法
-
C言語において、 配列要素をひ...
-
C#で構造体の配列を持った構造...
-
c言語
-
コンボボックスでデフォルト値...
-
MFC - ダイアログボックスのPic...
-
MFCのCArrayを使った二次元配列
-
Cのエラー
-
int i, int i[1];
-
fclose()でセグメンテーション違反
-
C言語 数値の連続入力について
-
C言語の2次元配列 容量が大き...
-
C言語の配列のコピーについて
-
C#でのフィボナッチ数列
-
C#で配列が空かを判定するには?
-
AfxBeginThread の引数について
-
c言語プログラミング 等差数列...
おすすめ情報