私はタイプはifstreamを使用したい*私のコードで開いているファイルはifstream *セグメンテーションフォールト
ifstream* i;
(*i).open("test.txt");
それは私がなぜ知らない、セグメンテーションフォールトをスローします。 問題を解決するのを手助けしてください(ifstream*
でファイルを開く)。
私はタイプはifstreamを使用したい*私のコードで開いているファイルはifstream *セグメンテーションフォールト
ifstream* i;
(*i).open("test.txt");
それは私がなぜ知らない、セグメンテーションフォールトをスローします。 問題を解決するのを手助けしてください(ifstream*
でファイルを開く)。
コードでは、i
はポインタであり、ポインタは初期化されていないため、ポインタが指すメモリ位置は不定です。
次に、undefined behaviorを呼び出す(*i).....
で逆参照しようとしています。
ポインタを参照解除する前に、メモリを割り当てる必要があります(つまり、ポインタが有効なメモリ位置を指すようにする必要があります)。
ifstream* i;
i
ポインタであるが、それは任意ifstream
オブジェクトを指していません。したがって、セグメント化障害。そのような
使用:
ifstream i;
i.open("test.txt");
それ以外の場合は、失敗した理由はどこにもではなく、有効なオブジェクトへのポインタポイント。
それとも、まだポインタを使用したい場合:
ifstream* i = new ifstream;
i->open("test.txt");
...
delete i;
あなたはポインタを持っていますが、どこで*ポイント*のでしょうか? –
また、現代のC++では、ポインタ*を使う必要はほとんどありません。 –
すべての警告とデバッグ情報( 'g ++ -Wall -g')でコンパイルしてください。次に**デバッガを使用してください** –