_recalloc Crash???



  • Hi Leute,

    unter welchen Umständen kann es dazu kommen, daß ein _recalloc in den Tiefen der ATL zum Absturz führt? Was muss vorher falsch gelaufen sein, daß das passiert?

    Der folgende Code stürzt bei uns ab, aber (!!!) nur AUSSERHALB einer Debugging-Session. Starten wir das Programm im Debugger, läuft es einwandfrei.

    ATLCOLUMNINFO* CidaFile::GetColumnInfo(void* pThis, ULONG* pcCols)
    {
    
       static ATLCOLUMNINFO _rgColumns[MAX_COLUMNS];
    
       ULONG ulCols = 0;
    
       // Check the property flag for bookmarks; if it is set, set the zero 
       // ordinal entry in the column map with the bookmark information.
       CidaRowset* pRowset = (CidaRowset*) pThis;
       CComQIPtr<IRowsetInfo, &IID_IRowsetInfo> spRowsetProps = pRowset;
    
       CDBPropIDSet set(DBPROPSET_ROWSET);
       set.AddPropertyID(DBPROP_BOOKMARKS); ///// ABSTURZ ///// 
    
       DBPROPSET* pPropSet = NULL;
    
       ULONG ulPropSet = 0;
    
       HRESULT hr;
    
       if (spRowsetProps)
          hr = spRowsetProps->GetProperties(1, &set, &ulPropSet, &pPropSet);
    
       if (pPropSet)
       {
          CComVariant var = pPropSet->rgProperties[0].vValue;
          CoTaskMemFree(pPropSet->rgProperties);
          CoTaskMemFree(pPropSet);
    
          if (SUCCEEDED(hr)/* && (var.boolVal == VARIANT_TRUE)*/)
          {
    		  // Ordinal = 1, nicht Ordinal = 0; dann funktioniert's mit CDynamicAccessor [WIE]
             ADD_COLUMN_ENTRY_EX(ulCols, OLESTR("Bookmark"), 1, sizeof(DWORD), 
             DBTYPE_BYTES, 0, 0, GUID_NULL, CidaFile, dwBookmark, 
             DBCOLUMNFLAGS_ISBOOKMARK)
          }
       }
       ulCols++;
       USES_CONVERSION;
    
       while(g_rgpColNames[ulCols]){
    		ADD_COLUMN_ENTRY(ulCols, A2OLE(g_rgpColNames[ulCols]), ulCols, 60, DBTYPE_VARIANT, 0xFF, 0xFF, 
    			GUID_NULL, CidaFile, m_Values[ulCols-1])
    			ulCols;
    		ulCols++;
       }
    
       if (pcCols != NULL)
    	   *pcCols = ulCols;
    
       return _rgColumns;
    }
    

    Wir wären für JEDE Hilfe dankbar!

    Danke!

    Grüße,
    Hendrik



  • in der debug version wird statt '_recalloc' eine funktion namens '_recalloc_dbg' verwendet. aber ob dir das hilft?
    🙂



  • Hat sich gerade relativiert. Den Codeblock, der abstürzt, brauchen wir überhaupt nicht, da wir keine Bookmarks verwenden. Das hat mir mein Kollege gerade eröffnet...

    ... aber wir haben ein weiteres Problem. Dafür möchte ich aber gerne einen neuen Thread aufmachen, wenn's erlaubt ist. 😕

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-190261.html

    Danke!


Anmelden zum Antworten