保存和加载我的模块
Saving & Loading my modules
所以我正在尝试重写我的旧内存 class 我做了一段时间,但在 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 导致断点并出现以下错误;
Access violation reading location 0xCDCDCDCD.
(完全错误)
Unhandled exception at 0x0FAF1F52 (msvcr110d.dll) in Memory Test.exe: 0xC0000005: Access violation reading location 0xCDCDCDCD.
编辑(2015-05-13):
我想我可能刚刚弄明白了,除了 Num,我的 Modules[128] 在任何地方都是未定义的,所以当使用 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;
}
您没有初始化 Modules
数组 - 该值 0xCDCDCDCD
是 C 运行时系统放在那里的标志,用于指示内存未初始化。
所以我正在尝试重写我的旧内存 class 我做了一段时间,但在 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 导致断点并出现以下错误;
Access violation reading location 0xCDCDCDCD.
(完全错误)
Unhandled exception at 0x0FAF1F52 (msvcr110d.dll) in Memory Test.exe: 0xC0000005: Access violation reading location 0xCDCDCDCD.
编辑(2015-05-13): 我想我可能刚刚弄明白了,除了 Num,我的 Modules[128] 在任何地方都是未定义的,所以当使用 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;
}
您没有初始化 Modules
数组 - 该值 0xCDCDCDCD
是 C 运行时系统放在那里的标志,用于指示内存未初始化。