Таинственный отчет о сбое - выглядит как ошибка процессора
Пользователь отправил мне аварийный дамп моей программы, и я не могу понять, как это возможно. Похоже, что один из регистров только что изменил свое значение без видимой причины. У меня нет никаких объяснений, кроме ошибки процессора, но я очень скептически к этому отношусь. Возможно, вы сможете определить, что здесь происходит.
Вот разборка кода, как видно при открытии отчета о сбое (кликабельно):
Вот, примерно, как выглядит код C:
void **pp = *g_some_global;
if(!pp)
return NULL;
int array_count = (int)pp[0];
void **array_ptr = (void **)pp[1];
for(i = 0; i < array_count; i++)
{
LONG_PTR *contents = array_ptr[i];
if(contents[4] == compare)
{
void **pp2 = (LONG_PTR *)contents[7]; // contents is different here! pp2 is NULL
int array_count2 = (int)pp2[0]; // the CRASH!
void **array_ptr2 = (void **)pp2[1];
// ...
}
}