2016-04-11 96 views
0

私は、フォルダから別の場所からファイルを読み込むプログラムを持っています。ファイルが正常に読み込まれると、ファイルのifstream変数を一時変数に割り当てます。以下のコードは例です:C++ - スローされた例外:読み取りアクセス違反。変数はnullptrでした

while (!CBAsales.eof()) 
    { 
     string sFilePath = "Datafolder/CBA/"; 
     sFilePath = sFilePath.append(sFileName); 
     // Read the csv file 
     infile.open(sFilePath); 
     if (!infile) 
     { 
      cout << sFileName << ": File not found!!!" << endl; 
      exit(1); 
     } 

     while (getline(infile, record, '\n')) 
     { 
      while (!infile.eof()) 
      { 
       if (record.size() > 0) 
       { 
        //insert elements here 
       } 
      } 
     } 
     infile.close(); 
     mapIAG.insert(pair<string, Vector<Stock>>(sFileName, V1)); 
     } 

    CBAsales.clear(); 
    CBAsales.seekg(0, ios::beg); 
    tempSales = &CBAsales; 
} 

これはファイルの読み取り値です。これでtempSales =&CBAsalesが表示されます。一時変数に代入されます。私はこれらの変数をグローバルに宣言し、以下に示すtempSalesへのポインタがあります。私は必要なすべてのレコードを表示していますのはここ

ifstream codeindex; 
ifstream IAGsales; 
ifstream CBAsales; 
ifstream NABsales; 
ifstream * tempSales; 
ifstream infile; 

は次のとおりです。

cout << "Enter date of transaction" << endl; 
while (!tempSales->eof()) 
{ 
    getline(*tempSales, record); 
    cout << record << endl; 
} 

これは私が取得エラーです:http://i.imgur.com/I9lv2zv.png

は、なぜそれが割り当てられていたにもかかわらず、ヌルを指していますか?ポインタを間違って使用していますか?

+0

最初にお読みくださいhttp://stackoverflow.com/help/mcve –

+0

@RichardHodges私は可能な限り最小限に抑えようとしました。スニペットは私の質問に関連しているので、これらのコード行を追加しました。 –

+0

これは、同じ動作を示す完全な10行プログラムを提供することを意味し、再現することができます。 –

答えて

0

あなたのループは意味をなさない。我々は唯一の関連する変数を考慮した場合には、コードと同等です

while (!CBAsales.eof()) 
{ 
    CBAsales.clear(); 
    CBAsales.seekg(0, ios::beg); 
    tempSales = &CBAsales; 
} 

ストリームCBAsalesは、ループ内のコードが実行しないことやループは永久に実行する最初のテストでファイルの末尾にあるのどちらか。

ループが決して実行されない場合、tempSales = &CBAsales;の文は実行されず、tempSalesの初期値は変更されません。

+0

ループについては何が分かりませんか?私は最初から最後までCBAファイルをチェックして、ベクトルのすべての要素を 'tempSales'に割り当てています。どこで私は間違えましたか? –

+0

ループは進行していません。無関係のオブジェクトを修正しながら 'CBAsales'の状態をループしています。私が答えて言ったように、CBAセールスに影響を与えるオブジェクトだけを保持すると、無限ループまたは実行しないループが発生します。これは間違っています。 – UmNyobe

関連する問題