![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
n × n の二次元配列の各要素に vector を突っ込みたいと思っています。
ちょうど三次元グラフで n × n の地表に可変な高さの草が生えてるようなのを想像していただければやりたいことが分かっていただけるかと。
で、このようにしてまずは確保しました。
int i, n = 2;
vector<int> ***vecMatrix;
vecMatrix = new vector<int>**[ n ];
for (i = 0 ; i < n ; i++)
vecMatrix[ i ] = new vector<int>*[ n ];
ここまでは問題ないのですが、次に vecMatrix[ i ][ j ] に対して要素を格納しようとして、
vecMatrix[ 0 ][ 0 ]->push_back( 1 );
とすると segmentation fault で落ちます。
ううーん、なぜでしょう。
No.1ベストアンサー
- 回答日時:
そりゃ、そうです。
vecMatrix[ i ] = new vector<int>*[ n ];
では 「vector<int>へのポインタ」の配列が用意されるだけで、そのポインタが指ししめすところの「vector<int>」がありません。
そこにアクセスしに行けば、エラーになっても不思議ではありません。
このやり方をするなら、全てのvecMatrix[i][j]についてvector<int>を割り当てる必要があります。
for (i = 0 ; i < n ; i++) {
vecMatrix[ i ] = new vector<int>*[ n ];
for(int j= 0 ; j < n ; ++ j ) {
vecMatrix[ i ][j] = new vector<int>() ;
}
}
当然、解放も一つずつやるのをお忘れなく。
それか
vector<int> **vecMatrix;
vecMatrix = new vector<int>*[ n ];
for (i = 0 ; i < n ; i++)
vecMatrix[ i ] = new vector<int>[ n ];
なら、デフォルトコンストラクタで初期化されたvector<int>の配列になるので
vecMatrix[ 0 ][ 0 ].push_back( 1 );
で大丈夫なはず。
それか、いっそ、 vector<vector<vector<int>>> と入れ子にしてしまうか。
No.2
- 回答日時:
んー、nが固定値なら
vector<int> vecMatrix[n][n];
だし、可変値なら
vector<vector<vector<int>>> vecMatrix;
でしょう。
型の想定がそもそもの間違いの始まりだと思いますが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- Java Java・配列の問題です。 int 「」nums = new int「5」 ⤴︎ この5の事を言葉で 2 2023/06/21 22:30
- C言語・C++・C# ポインタの型変換、どうやるんでしたっけ? 2 2022/03/28 11:00
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- ブルーレイ・プレーヤー・レコーダー BD-REについて教えてください。 3 2022/11/10 23:28
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
「指定されたキャストは有効で...
-
C言語 エラーの原因がわからな...
-
【C++】関数ポインタの使い方
-
数字列を3桁ごとにカンマで区切...
-
c++でテンプレートのコードでわ...
-
複数桁10進数の*桁目だけを抽出...
-
(int *)の意味
-
ラップ関数とはどんなものですか?
-
C言語
-
プログラミング☆
-
実数の整数部,小数部の取得
-
system関数がうまくいかない
-
Arduinoのプログラムにエラーが...
-
毎回違う乱数を生成するにはど...
-
16進数の計算の仕方を教えて下さい
-
PowerShellがうまくいかない
-
このプログラミング誰か教えて...
-
構造体の勉強中です 合計点の高...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
複数桁10進数の*桁目だけを抽出...
-
へんな現象
-
【C++】関数ポインタの使い方
-
C言語 エラーの原因がわからな...
-
if と配列の組み合わせ
-
C言語での奇数の和
-
C言語 配列と関数の練習問題
-
ラップ関数とはどんなものですか?
-
(int *)の意味
-
C言語
-
実数の整数部,小数部の取得
-
足して100になるような乱数のア...
-
卒業研究でよく分からないとこ...
-
数字列を3桁ごとにカンマで区切...
-
c言語
-
std::set<int> で、ある値が何...
-
比較回数と交換回数表示について
おすすめ情報