Visual Studio 2008 Windows Mobile 6.5.3 ARMV4I 프로젝트가 있습니다. std::bad_alloc
예외를 찾는 try/catch 블록을 사용하여 메모리 부족 조건을 확인합니다. 그러나 테스트를 통해 실제로 NULL 값을 반환하고 예외를 throw하지 않을 수 있음을 발견했습니다.Windows Mobile이`new` 오류시 0을 반환합니다.
int _tmain(int argc, _TCHAR* argv[])
{
int i = 0;
try
{
for(; i < 30000; ++i)
{
BYTE* f = new BYTE[1024];
if(NULL == f)
{
NKDbgPrintfW(L"NULL - Survived %d iterations\r\n", i);
break;
}
}
}
catch(std::bad_alloc&)
{
NKDbgPrintfW(L"std::bad_alloc - Survived %d iterations\r\n", i);
}
return 0;
}
이 인쇄물은 NULL - Survived 29599 iterations
입니다.
나는 nothrownew.obj
과 연결되어 있지 않으며 이에 따라 std::bad_alloc
예외가 예상됩니다. http://msdn.microsoft.com/en-us/library/kftdy56f%28v=VS.90%29.aspx
누가 무슨 일이 일어나는지 알고 있습니까?
덕분에, PaulH
이것은 컴파일러에 따라 다릅니다. 이것에 대한 몇 가지 옵션이 있어야합니다. 이것은 매우 일반적입니다 - 메모리 부족시 반응을위한 두 가지 방법이 있습니다 - expd :: bad_alloc 또는 new는'NULL'을 반환합니다. Apperantly, 귀하의 컴파일러는 두 번째 않습니다. 죄송합니다, VS –
@Kiril에 대해 자세히 알려 드릴 수 없습니다 - 게시물 하단의 링크 별 "메모리 할당이 실패하면 C 런타임 라이브러리의 새 함수가 std :: bad_alloc 예외를 발생시킵니다." – PaulH
데스크탑 * 용 C 런타임 라이브러리 *. CE의 런타임이 항상 데스크탑의 동작을 따르는 것은 아닙니다. – ctacke