2011-08-02 11 views
3

"解放後に変更されたフリーヒープブロック"が悪名高いです。 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;  
     } 
+1

は、あなたは内の空き左。自由に移動してください。ループ内でmalloc/freeを何度も繰り返したくはありません。非常に非効率です。 –

答えて

7

一度割り当てますが、ループ内で自由に割り当てます。将来的には、free()を呼び出した後でポインタをNULLに設定すると、この種のものが見つけやすくなります。

2

。 RegEnumValueループは、解放された後にデータを使用しています。

0

コードおよびすべてのライブラリの/ Zpコンパイラオプション(C/C++コード生成の "struct member alignment") の "default"値を確認します。

は説明については、以下を参照してください。あなたはループの外で、あなたのmallocを移動 https://stackoverflow.com/a/14444115/1997864

関連する問題