QA@IT

c++ 初心者 std::bad_allocエラー 優先度付きキューとvectorを宣言するとエラーがでます

228 PV

c++初心者です。
ある競技プログラミングのアルゴリズムを実装しようと思い、VSCodeにてソースコードを書いたところ、std::bad_allocエラーが出ました。
そこで行を削除しつつbad_allocエラーの原因がどこか探ってみたところ、以下のコードまで削減してもなおエラーが出ます。
またfor文・q.push()・a(n)定義文、のいずれかを消去すると、エラーが消えました。

・このようなエラーがどういう原理によって発生しているのかが(なんとなくでよいので)知りたいです。
・また、この場合の対処法や、もしくは対処法を得るために知るべき知識など、ありますでしょうか?

(このコードは、元のコードからErrorが消えないように行を削除していった結果、残ったもので、アルゴリズム的意味があるわけではありません。

#include <iostream>
#include <vector>
#include <queue>
using namespace std;

int main(){
    int n;
    vector<int> a(n);
    priority_queue<int> q;
    q.push(1);
    cin >> n;
    for(int i=0; i<n; i++){
    }
}

エラー

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

回答

おっしゃる通りでした。
ありがとうございます。

編集 履歴 (0)
    int n;
    vector<int> a(n);

ここ、nが初期化されていませんので、ベクターのaの要素がとんでもない値になっているかもしれません(場合によってはマイナス値)。おそらくやりたい処理は

    int n;
    cin >> n;
    vector<int> a(n);

    for(int i=0; i<n; i++){
    }

じゃないかと思います。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。