2017-02-22 1 views
-7

私はタイプはifstreamを使用したい*私のコードで開いているファイルはifstream *セグメンテーションフォールト

ifstream* i; 
(*i).open("test.txt"); 

それは私がなぜ知らない、セグメンテーションフォールトをスローします。 問題を解決するのを手助けしてください(ifstream*でファイルを開く)。

+2

あなたはポインタを持っていますが、どこで*ポイント*のでしょうか? –

+0

また、現代のC++では、ポインタ*を使う必要はほとんどありません。 –

+0

すべての警告とデバッグ情報( 'g ++ -Wall -g')でコンパイルしてください。次に**デバッガを使用してください** –

答えて

2

コードでは、iはポインタであり、ポインタは初期化されていないため、ポインタが指すメモリ位置は不定です。

次に、undefined behaviorを呼び出す(*i).....で逆参照しようとしています。

ポインタを参照解除する前に、メモリを割り当てる必要があります(つまり、ポインタが有効なメモリ位置を指すようにする必要があります)。

1
ifstream* i; 

iポインタであるが、それは任意ifstreamオブジェクトを指していません。したがって、セグメント化障害。そのような

0

使用:

ifstream i; 
i.open("test.txt"); 

それ以外の場合は、失敗した理由はどこにもではなく、有効なオブジェクトへのポインタポイント。

それとも、まだポインタを使用したい場合:

ifstream* i = new ifstream; 
i->open("test.txt"); 
... 
delete i;