2015-05-13 4 views
-1

Итак, я пытаюсь переписать старый класс памяти, который я сделал некоторое время назад, но наткнулся на некоторые проблемы в инструкции strcmp. Это моя SaveModules функция:Сохранение и загрузка моих модулей

void Memory::AddModuleToList(char* modSaveName, LPSTR ModName, int num) 
{ 
    this->Modules[num] = this->Module(ModName); 
    this->modNames[num] = modSaveName; 
} 

И это, как я загрузить их:

DWORD Memory::LoadSavedModule(char* modName) { 
    for (int i = 0; i < 128; i++) { 
     if (strcmp(modName, modNames[i])) { 
      return Modules[i]; 
     }; 
    } 
} 

Причина я Переберите 128, потому что мой модули массив имеет 128 слотов. Теперь проблема с моим кодом заключается в том, что strcmp вызывает точку останова с ошибкой follolwing;

Access violation reading location 0xCDCDCDCD. 

(Full Error)

Unhandled exception at 0x0FAF1F52 (msvcr110d.dll) in Memory Test.exe: 0xC0000005: Access violation reading location 0xCDCDCDCD. 

EDIT (2015-05-13): Я думаю, что, возможно, только понял это, мои модули [128] не определено везде, кроме Num, так при использовании strcmp он не может сравниться и выдает исключение, правильно ли я прав?

Как я ее решил:

void Memory::AddModuleToList(char* modSaveName, LPSTR ModName, int num, bool firstTime) 
{ 
    if (firstTime) { 
     for (int i = 0; i < 128; i++) { 
      this->modNames[i] = ""; 
      this->Modules[i] = 0; 
     }; 
    }; 
    this->Modules[num] = this->Module(ModName); 
    this->modNames[num] = modSaveName; 
} 
+2

Как модули [] инициализированы? Похож на неинициализированный указатель ... – Vinzenz

ответ

1

Вы не инициализация Modules массива - это значение 0xCDCDCDCD является флагом положить туда систему C во время выполнения, чтобы сигнализировать память является неиницализированным.

+0

Просто редактирование, которое я добавил, подумав немного больше, я понял это, извините. –

Смежные вопросы