2011-01-01 27 views
1

私のC++プログラムのコンパイルと私は(メインからこの関数を呼び出すまで動作します):"アクセス違反(セグメンテーションフォルト)がプログラムで発生しました。"

int uword(){fstream infile("numbers.txt"); 
fstream exfile("wordlist.txt"); 
string numb[numoflines]; 
string lines[numoflines]; 
number = 1; 
line = 1; 
for(int i=0;i<numofline;++i) 
    { 
    getline (infile,number); 
    numb[i] = number; //I think this is causing the problem 
    getline (exfile,line); 
    lines[i] = line; //This too 
    } 
infile.close(); 
exfile.close();  
string yourword; 

ここで何かがデバッグにそれが育ち、「アクセス違反(セグメンテーションフォールト)をポップアップ表示、クラッシュすることを引き起こしあなたのプログラム。

編集:私の間違いは、forループで!infile.eofを使用していました。

+0

入力ループが正しくありません。 GManは、[C++ FAQの質問への回答]で入力を適切に処理する方法について説明しました(http://stackoverflow.com/questions/4258887/semantics-of-flags-on-basic-ios/4259111# 4259111)。 –

+0

!infile.eof()をi <= numoflines(同じことをする必要があります)に変更すると、エラーが表示されます。私はあなたがあなたの参照によって意味したものだと思います。 – Mark

+0

あなたはi

答えて

1

getline機能が動作しないと思われる機能は動作しません。

また、infileにはnumoflines行以上ある可能性があります。

+0

「getline」の正しい使い方について詳しく教えてください。 numoflinesはファイル内の行数によって前に計算されました。 – Mark

+0

@マーク: 'man 3 getline'を参照してください。これはCの 'FILE *'ハンドルで使用するように設計されており、ここで 'fstream'で使用しようとしています。 C++スタイルの 'ifstream'を使うには、' infile >> number'を実行する必要があります。 – Borealid

+0

私はこの目的のために働くと思われるのでgetlineを使用しています。 infile >> numberを指定すると、ファイル全体がnumber numberに書き込まれますか? – Mark

3

ない直接的な答えが、私はそれが良いものだと信じて...

利用ザ・デバッガ! GDBは、セグメンテーションエラーが発生したときにの正確な行でサスペンドする必要があります。そのため、エラーの内容について非常に良いヒントが得られます。

+0

これは助けになりました。問題のある場所でOPを編集しました。 – Mark

関連する問題