のインスタンスを投げた後に呼び出さ終了し、私は彼らが計上された順序で次のタスクを実行するには、以下の貼り付けコードを書いた:C++エラーは:「のstd :: bad_alloc」
- 入力ファイルを読み、その内のエントリの数をカウントすることは
- (エントリの数に等しいサイズ)適切なサイズの配列
- は、入力ファイルの先頭に戻り、配列 に再び
- ストアエントリをそれを読むの作成します
- ファイル内のエントリ数とエントリ自体を表示します。ここで
私のコードです:
#include <iostream>
#include <fstream>
#include <exception>
using namespace std;
int main(int argc, char* argv[]){
ifstream inFile(argv[1]); //passing arguments to the main function
int numEntries;
if(!inFile){
cout << "file not found" << endl;
return 1;
}
string entry;
while (!inFile.eof()){ //counting the number of entries
getline(inFile,entry);
++numEntries;
}
const int length = numEntries; //making an array of appropriate length
int*arr = new int[length];
inFile.clear(); //going back to the beginning of the file
inFile.seekg(0, ios::beg);
int i = 0;
const int size = numEntries; //making an array to store the entries in the file
int matrix[size];
int pos = 0;
int variable = 0;
while(pos < size){
inFile >> variable;
matrix[pos] = variable;
++pos;
}
cout<< numEntries << "entries have been read"<< endl;
inFile.close();
for(int i = 0; i < pos; ++i)
cout << matrix[i] << endl; //printing out the entries
return 0;
}
私は、エラーメッセージが出続ける.cppファイルを実行すると:
terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc Aborted (core dumped)
を、私は、これはメモリ不足に関係しています集まりましたmain()関数から抜け出した変数がありますが、この特定の状況でどのように問題に対処するのか分かりません。それが適切であれば、私はLinuxコンピュータで作業しています。
第一ホール:int numEntries
プログラムは未定義の動作を示します。 'numEntries'は決して初期化されません。それはランダムなゴミを含んでいます - おそらく非常に大きな数です。 –
このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –
頻繁にデータを初期化できない場合は、Windows/Visual Studioに切り替える必要があります。 Visual Studioには静的なコード分析機能があり、この種のバグを簡単にキャッチします。 – IInspectable