質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

Q&A

解決済

1回答

762閲覧

bad_allocメモリ確保

blackbeans

総合スコア1

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

0グッド

0クリップ

投稿2023/02/25 14:46

C++でatcoderの幅優先探索の問題に挑戦しているのですが、メモリ確保ができていないようです。
メモリ確保についてはまだまだ理解できていないので以下のエラーをなくす方法を教えて頂けたら幸いです。

エラーメッセージ

terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc

ソースコード

#include <iostream> #include <queue> using namespace std; typedef struct{ int y, x, dist; }node, node_p; char c[60][60]; int dist[60][60]; int main(){ int R, C; int sy, sx, gy, gx; cin >> R >> C >> sy >> sx >> gy >> gx; queue<node> que; for(int i = 1; i < R+1; i++){ for(int j = 1; j < C+1; j++){ cin >> c[i][j]; dist[i][j] = -1;//未訪問 } } node temp, ntemp; dist[sy][sx] = 0; temp = {sy, sx, dist[sy][sx]}; que.push(temp); //BFS while(!que.empty()){ temp = que.front(); que.pop(); //cout << temp.y << temp.x << temp.dist << endl; if(temp.y==gy && temp.x == gx){ cout << temp.dist << endl; break; } //tempから行ける頂点探す if(c[temp.y+1][temp.x] == '.' && dist[temp.y+1][temp.x] == -1){ ntemp = {temp.y+1, temp.x, temp.dist+1}; que.push(ntemp); } if(c[temp.y-1][temp.x] == '.' && dist[temp.y-1][temp.x] == -1){ ntemp = {temp.y-1, temp.x, temp.dist+1}; que.push(ntemp); } if(c[temp.y][temp.x+1] == '.' && dist[temp.y][temp.x+1] == -1){ ntemp = {temp.y, temp.x+1, temp.dist+1}; que.push(ntemp); } if(c[temp.y][temp.x-1] == '.' && dist[temp.y][temp.x-1] == -1){ ntemp = {temp.y, temp.x-1, temp.dist+1}; que.push(ntemp); } } }### ヘディングのテキスト

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

actorbug

2023/02/25 21:44

質問を編集して、問題へのリンクを載せてください。 ソースコードだけ見せられても、どのような入力が想定されているのか分からないので回答できません。
actorbug

2023/02/26 21:15

今回はこちらで問題へのリンクを載せておきます。次回からは最初から載せるようにしてください。問題が違うようであれば、正しいリンクを載せてください。 ABC007 C - 幅優先探索 https://atcoder.jp/contests/abc007/tasks/abc007_3 さて、bad_allocですが、メモリの確保に失敗した際に投げられる例外です。 今回のコードで、メモリの確保をしているのは、queue<node>だけです。 こちらのキューに限界を超えて要素を追加しようとしたため、bad_allocが発生しています。 なぜそのような状況に陥っているのか、調べてみてください。
guest

回答1

0

自己解決

回答ありがとうございます。
問題を貼ることまで頭が回っていませんでした。貼っていただきありがとうございます。キューのサイズを確認した所莫大な値まで増えていったので、dist配列を更新することを忘れていたことに気づきました。
ACもとることができました。
ありがとうございます。

投稿2023/02/28 02:16

blackbeans

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問