GFlags를 사용하는 작은 응용 프로그램에서 페이지 힙을 사용하려고하지만 어떤 이유로 작동하지 않습니다.Windows GFlags 응용 프로그램에서 힙 손상 감지
int* a;
a= (int*)malloc(1);
*a= 8888800;
return 0;
이 코드를 실행하는 응용 프로그램이 충돌하지 않습니다
나는 않습니다 모두가 힙 메모리 손상 작은 C의 ++ 응용 프로그램을 작성했습니다. 하지만 페이지 힙을 사용하면 세 번째 줄에서 예상 할 수 있습니다.
나는 GFlags를 올바르게 활성화하지 않았지만 문제를 파악할 수 없다고 생각합니다. 이미지 파일 탭에서 GFlags exe를 실행 한 후 내 EXE 경로를 복사하고 페이지 힙 사용 및 예외 옵션 중지를 표시했습니다. 나는 CMD를 체크하고 페이지 힙이 활성화 된 것을 보았다. 무엇이 문제 일 수 있습니까?
* 동작이 정의되지 않았습니다. 당신이 UB를 가지고있을 때 일어나는 일은, 잘 정의되지 않은 * 것이고, 당신은 그것을 예측할 수 없습니다. 어떤 경우에는 잘 작동하는 것처럼 보일 수도 있고, 충돌 할 수도 있으며, 때로는 비강 악마 (http://catb.org/jargon/html/N/nasal-demons.html)를 얻을 수도 있습니다. 이것은 또한 왜 C++에서'malloc'을 사용하지 말아야하는지에 대한 좋은 예입니다. –
GFlags가 작동한다는 것을 증명할 수있는 방법이 있습니까? –
@Someprogrammerdude : 언어를 남용하는 정의되지 않은 동작이 아닙니까? 컴파일러가 정확히 무엇을해야하는지 알고 있기 때문에 이것은 IMHO C++ 언어 남용이 아닙니다. 따라서 문제는 Windows가 메모리 관리를 통해이 사건을 처리하는 방법입니다. 컴파일러는'malloc()'에 의해 할당 된 바이트 수를 알 수 없다. 매개 변수 '1'이 1KB를 의미하면 모든 것이 정상입니다. –