"解放後に変更されたフリーヒープブロック"が悪名高いです。 message on data =(LPBYTE)malloc(MAX_VALUE_DATA);. This stackoverflow thread suggests私は何かを間違って解放しているからです。そして、実際には、底面近くのフリー(データ)がコメントされていない場合、このエラーが返され、コメントされていれば、それはなくなります。どのように私はそれを間違って解放するのですか?あなたはループの外()自由に移動する必要が解放後にフリーヒープブロックが変更されました
// Enumerate the key values.
if (cValues)
{
printf("\nNumber of values: %d\n", cValues);
LPBYTE data;
DWORD size;
data=(LPBYTE) malloc(MAX_VALUE_DATA);
messageProvider mp={(TCHAR*) currentRoot,NULL,NULL,NULL};
BOOL anyGoodValues=FALSE;
for (i=0, retCode=ERROR_SUCCESS; i<cValues; i++)
{
cchValue = MAX_VALUE_NAME;
achValue[0] = '\0';
ZeroMemory(data,MAX_VALUE_DATA);
//data=(LPBYTE) malloc(MAX_VALUE_DATA);
size=MAX_VALUE_DATA;
retCode = RegEnumValue(hKey, i,
achValue,
&cchValue,
NULL,
NULL,
data,
&size);
if (retCode == ERROR_SUCCESS)
{
_tprintf(TEXT("(%d) '%s'\n"), i+1, achValue);
BOOL valFound=FALSE;
if (_tcscmp(achValue,_T("ParameterMessageFile")) == 0){
mp.ParameterMessageFile=(TCHAR *)data;
anyGoodValues=TRUE;
valFound=TRUE;
}
if (_tcscmp(achValue,_T("CategoryMessageFile")) == 0){
mp.CategoryMessageFile=(TCHAR *)data;
anyGoodValues=TRUE;
valFound=TRUE;
}
if (_tcscmp(achValue,_T("EventMessageFile")) == 0){
mp.ParameterMessageFile=(TCHAR *)data;
anyGoodValues=TRUE;
valFound=TRUE;
}
if(!valFound){
//free(data);
}
}
}
if(anyGoodValues)
mpArray[mpIndex++]=mp;
}
は、あなたは内の空き左。自由に移動してください。ループ内でmalloc/freeを何度も繰り返したくはありません。非常に非効率です。 –