現在作成中のプログラムは終了する時にアクセス違反が発生しましたと
表示されます。
以前はこの様なことはなかったのですが構造体に変数を追加した直後に起こるようになりました。
typedef struct _A{
int x,y;
int cost;
vector<int> To;
vector<int> E_cost;
}A_t;
typedef struct _B{
double x,y;
int sex;
char Name[20];
vector<int> root;
vector<A_t> Map; //このMapという変数を追加するとエラーがでる。
}B_t;
この変数を消すとエラーが出ることはありません。
まだこの変数は追加しただけで使っていません。終了時にのみ発生します。
A 回答 (8件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
>本当に追加しただけでコピーも代入もしていません。
追加した
vector<A_t> Map
ではなくて追加された側のB_tや、それを使用しているかもしれない構造体やクラスの方です。
それとも構造体の定義だけしかしてない状態でエラーが起きるんですか。
この回答への補足
追加した vector<A_t> Mapをコメントアウトするだけで
正常に動作します。
ご指摘頂いた追加された側をチェックしてきます。
載せ忘れていたエラーで止まっている箇所を張っておきいます。
#if _ITERATOR_DEBUG_LEVEL == 2
if (_Myproxy != 0)
{// proxy allocated, drain it
_Lockit _Lock(_LOCK_DEBUG);
for (_Iterator_base12 **_Pnext = &_Myproxy->_Myfirstiter;
*_Pnext != 0; *_Pnext = (*_Pnext)->_Mynextiter)
(*_Pnext)->_Myproxy = 0; //この行で止まっている。
_Myproxy->_Myfirstiter = 0;
}
#endif /* _ITERATOR_DEBUG_LEVEL == 2 */
}
No.5
- 回答日時:
vector<A_t> が C++ のstd::vectorだとして。
あなたはコピーしている、という意識は無いかもしれませんが、 vectorの中でコピーが行われている可能性が高いです。
その結果
A_tにはコピーコンストラクタが無いので、標準のものが使われる
→A_t.To,A_t.E_const の「浅いコピー」が作られる
→ コピー元が解放される
→ コピー先は、内部のポインタが解放された領域を指したまま
→ コピー先も解放
→ 既に解放されている
といった現象が起っているのではないかと予想されます。
No.7
- 回答日時:
解決するかどうかまではわかりません。
コピーコンストラクタの件は明らかにおかしいから、直しておこう、というものです。
他の要因が無いと断言はできません。
std::vectorを使うときは、いろいろ気を付けなければならない事項があります。
(そうでなくても、C/C++でメモリ関連、となれば、気を付けることばかりです)
「std::vector 自作クラス」あたりで検索してみてください。
No.8
- 回答日時:
>追加した vector<A_t> Mapをコメントアウトするだけで
>正常に動作します。
とりあえず書いておきますが
B_t b1;
B_t b2;
b2 = b1;
上記コード見た目こそ、vector<A_t> B_t::Mapのコピーをしてないように見えますけど実際にはしてるというのはわかりますか?
またコピーコンストラクタが必要な場合は、operator=もふつうは必要です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# プログラムが書けません。 4 2023/01/22 22:57
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# 未解決の外部シンボル _printfが関数_mainで参照されました 1 2022/09/18 15:28
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access VBAから使用したExcelプ...
-
C++言語で、構造体のコピーは可...
-
Eclipseのコード入力時の、行コ...
-
vb2010 ビルド後のexeコピーに...
-
DataTableに入っているデータを...
-
エクセルのマクロについて教え...
-
Eclipseでコピーするとき行数な...
-
ROBOCOPYをスペース付きのフォ...
-
【再質問】Eclipseのコード入力...
-
他プロジェクトのFormを自プロ...
-
CStringArray[2]のコピー
-
一行おきに貼り付ける 可能でし...
-
エクセルVBA 実行時エラー'...
-
パスワードのコピー&ペースト...
-
Listviewに表示された文字のコ...
-
Ctrl + Cなど複数の入力キー...
-
.BATでクリップボードに複数の...
-
ASP.net でコントロールをコピー
-
ブラウザからコピペすると文字...
-
gitってなんですか?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access VBAから使用したExcelプ...
-
エクセルのマクロについて教え...
-
DataTableに入っているデータを...
-
Eclipseのコード入力時の、行コ...
-
C++言語で、構造体のコピーは可...
-
プログラムについて。
-
エクセルVBA 実行時エラー'...
-
Ctrl + Cなど複数の入力キー...
-
マウントしたディスクにcpで、...
-
Activesheet.Pasteで困っています
-
一行おきに貼り付ける 可能でし...
-
Listviewに表示された文字のコ...
-
文字列の切り出し
-
arduino unoからデータを読み出...
-
シートに張り付けたボタンがシ...
-
ブラウザからコピペすると文字...
-
ROBOCOPYをスペース付きのフォ...
-
バッチで当日日付で作成される...
-
jakarta poiを使用し、EXCELの...
-
ACCESS VBAでExcelを開き行をコ...
おすすめ情報