을 삭제 내 코드입니다.
두 번째 줄은 문자열 길이가
인 새로운 문자 배열 (c-string)을 만듭니다. 세 번째 줄은 문자열을 읽습니다. (파일에서 읽음)
네 번째 줄은 끝에 NULL을 추가합니다.
다섯 번째 줄은 C 문자열에서 std :: string을 만듭니다.
여섯 번째 줄은 C 문자열을 삭제합니다 (힙 손상은 여기에 있습니다)
7 번째 줄은 문자열을 반환하지만 오류로 인해이 지점에 도달하지 않습니다.힙 손상 문자열 여기
6 번째 줄에서 힙 손상 오류가 발생했습니다. CRT가 응용 프로그램이 힙 버퍼의 끝 뒤에 메모리에 쓴 것을 감지했습니다.
제 질문은 분명 할 수 있지만 왜 힙 손상이 발생합니까? std :: string을 만들면 문자열을 복사해야하므로 C 문자열을 삭제해도 안전합니다.
현재 std :: string은 삭제 한 후 C 문자열에 액세스하려고합니다.
아이디어가 있으십니까?
코드에 [delete]가 있습니다. 따라서 코드가 잘못되었습니다. 'std :: vector' 또는 무엇인가를 사용하거나 심지어 문자열을 직접 읽어 들일 수도 있습니다. – GManNickG
@GMan : 내가 게시하기 전에 귀하의 의견조차 보지 못했습니다 : 그것은 너무 코드를 단순화하는 방법은 놀라운 일입니다 ... –