Неподписанный int ведет себя по-другому в режиме выпуска

У меня странная проблема, в режиме отладки этот код работает нормально:

char* PCInformation::GetCPUName()
{
if (CPUName[0] == '\0')
{
_memset(CPUName, 0, 0x3F);
// Get extended ids.
int CPUInfo[4] = {-1};
__cpuid(CPUInfo, 0x80000000);
unsigned int nExIds = CPUInfo[0];

printf(3, "%d\n%d\n", nExIds, 0x80000000);

// Get the information associated with each extended ID.
for(unsigned int i=0x80000000; i<=nExIds; ++i)
{
printf(3, "0x80000000 nExIds: %X, i: %X\n", nExIds, i);
getchar();
__cpuid(CPUInfo, i);

// Interpret CPU brand string and cache information.
if  (i == 0x80000002)
{
_memcpy( CPUName,
CPUInfo,
sizeof(CPUInfo));
}
else if( i == 0x80000003 )
{
_memcpy( CPUName + 16,
CPUInfo,
sizeof(CPUInfo));
}
else if( i == 0x80000004 )
{
_memcpy(CPUName + 32, CPUInfo, sizeof(CPUInfo));
}
}
}

return CPUName;
}

Источник: http://weseetips.com/2009/06/21/how-to-get-the-cpu-name-string/

Редактировать: (так выглядит _functions)

BOOL CallDynamic(const char* szModule, const char* szFunction, DWORD* dwReturn, size_t argc, ... );
#define printf(argc, ... ) (CallDynamic(MSVCRT, "printf", NULL, argc, __VA_ARGS__ )) //number arguments, arguments

Если вам интересно, почему есть _ для функций STD-C, это потому, что они вызываются динамически, но это не эта проблема. (Потому что тот же код раньше работал нормально, но я поместил его в класс и БАМ!)

В любом случае, если я выберу Release (как режим сборки) (int) я содержит какое-то странное значение или что-то. Для большей декларации некоторые фотографии:

Релиз
Release Build

отлаживать
Debug Build
В выпуске это заканчивается бесконечным циклом for.

Редактировать: Я просто изменил код на:

char* PCInformation::GetCPUName()
{
if (CPUName[0] == '\0')
{
_memset(CPUName, 0, 0x3F);

int CPUInfo[4];
_memset(CPUInfo, 0, 4);

__cpuid(CPUInfo, 0x80000000);
_memcpy(CPUName, CPUInfo, sizeof(CPUInfo));

__cpuid(CPUInfo, 0x80000002);
_memcpy(CPUName + 16, CPUInfo, sizeof(CPUInfo));

__cpuid(CPUInfo, 0x80000003);
_memcpy(CPUName + 32, CPUInfo, sizeof(CPUInfo));

__cpuid(CPUInfo, 0x80000004);
_memcpy(CPUName + 48, CPUInfo, sizeof(CPUInfo));
}

return CPUName;
}

Хотя я все еще хотел бы знать, что вызывает это.

С Уважением,

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …