2017-02-22 1 views
-7

내가 내 코드ifstream * 분할 오류

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

그것은 분할 오류 발생에 * 열려있는 파일을 타입 ifstream을 사용하려면, 난 이유를 모르겠어. 문제를 해결할 수 있도록 도와주세요 (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;