본문 바로가기

프로그래밍/C++

[C++] HEAP_CORRUPTION_DETECTED

반응형

HEAP_CORRUPTION_DETECTED: after Normal block (#78) at 0x00DE52F8.
CRT detected that the application wrote to memory after end of heap buffer.

 

흔히 문자열을 다룰 때 종종 마주치는 에러다.

허용되지 않은 메모리 영역에 접근해서 나타나는 에러다.

위 에러는 다음과 같은 코드에서 발생할 수 있다.

#include <iostream>

using namespace std;

int main() {
	char* text = new char[10];
	scanf("%s", text);
	delete[] text;
	return 0;
}

위 코드에서 길이가 10 이상인 문자열이 입력되면 문제가 된다.

문자열의 끝에는 '\0'이라는 널문자가 존재한다.

그래서 scanf로 입력을 받은 후 할당받지 않은 영역까지 데이터가 채워졌고, 이로 인해 에러가 발생하는 것이다.

따라서 입력받을 문자열의 길이가 N일 경우 동적할당하는 크기는 N + 1이어야 한다. (참고)

반응형