다음 코드는 내 프로그램을 어떻게 막을 수 있습니까? 이 코드를 실행하면calloc 오류로 인해 프로그램이 손상되는 것을 방지하려면 어떻게해야합니까?
::MessageBox(NULL, L"before", NULL, MB_OK);
void* x = ::calloc(1, -1);
::MessageBox(NULL, L"after", NULL, MB_OK);
가 나는이 메시지 상자 "전에"다음 "처리되지 않은 win32에서 예외"로 프로그램이 충돌합니다 ("후"메시지 상자가 표시되지 않음) 얻을.
저는 calloc이 너무 많은 메모리를 요청함으로써 충돌을 일으키는 것을 알고 있습니다! 내가 알고 싶은 것은 충돌을 막아서 컨트롤을 되 찾을 수 있고 메모리 부족을 다른 방법으로 처리 할 수 있다는 것입니다.
(윈도우 XP, 비주얼 스튜디오 2005)
나는 calloc에 불가능한 크기를 의도적으로 전달하여 실패하게 만듭니다. 내 프로그램이 시스템의 메모리 부족으로 인해 실패 할 경우를 처리하려고합니다. 이것은 단지 그 상황을 시뮬레이션합니다 !!! – user1292915
좋은 버그 리포트가 "예상되는 행동"을 포함한다는 것과 같은 정신으로'calloc()'이'NULL'을 리턴하고 프로그램을 중단시키지 않을 것이라고 기대해야한다고 말해야합니다. 그렇게하면 너무 빨리 읽은 사용자의 의견을 저장할 수 있습니다. –
어쨌든 버그처럼 보입니다 : http://connect.microsoft.com/VisualStudio/feedback/details/356599/calloc-crashes-if-total-size-heap-maxreq –