반응형
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이어야 한다. (참고)
반응형
'프로그래밍 > C++' 카테고리의 다른 글
Visual Studio에 OpenGL 설치하기 (1) | 2020.11.14 |
---|---|
[C++] 새로 알게 된 사실 몇 가지 (계속추가예정) (0) | 2020.10.22 |
[C] 백준 풀 때 Tip. 답안 검토 시 파일로 입력 넣기 (0) | 2020.09.26 |
[C++] 비주얼스튜디오(VS)에서 발생하는 scanf 오류 해결하기 (0) | 2020.09.22 |
[C++] 삼항연산자를 중첩해서 쓸 때 주의할 점 (0) | 2020.09.06 |