내가 내 코드ifstream * 분할 오류
ifstream* i;
(*i).open("test.txt");
그것은 분할 오류 발생에 * 열려있는 파일을 타입 ifstream을 사용하려면, 난 이유를 모르겠어. 문제를 해결할 수 있도록 도와주세요 (ifstream*
로 파일 열기). 왜 잘못했는지 말해주세요.
내가 내 코드ifstream * 분할 오류
ifstream* i;
(*i).open("test.txt");
그것은 분할 오류 발생에 * 열려있는 파일을 타입 ifstream을 사용하려면, 난 이유를 모르겠어. 문제를 해결할 수 있도록 도와주세요 (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')로 컴파일하십시오. 그런 다음 ** ** 디버거를 사용하십시오 ** –