E_OUTOFMEMORY, повреждение кучи - PullRequest
0 голосов
/ 11 января 2012

Что не так с этим кодом:

    HRESULT AllocateAndFillOutParameters(DWORD * a_Attrib_Count, BSTR ** a_AttribName, DWORD** a_AttribId,BSTR** a_AttribDescription, BSTR** a_AttribDataType, 
    BSTR** a_AttribAdvanceDataType,DWORD** a_attribfieldlength, VECTOROFATTRIBUTESSTRUCT a_vectAttributes )
{
 HRESULT hr = S_OK;
 VECTOROFATTRIBUTESSTRUCT::iterator itr_vectCategory = a_vectAttributes.begin();

    // Memory Allocation 
     *a_Attrib_Count = a_vectAttributes.size();
    *a_AttribName = (BSTR*)CoTaskMemAlloc(*a_Attrib_Count * sizeof(BSTR));
    *a_AttribDescription = (BSTR*)CoTaskMemAlloc(*a_Attrib_Count * sizeof(BSTR));
    *a_AttribId = (DWORD*)CoTaskMemAlloc(*a_Attrib_Count * sizeof(DWORD));
    *a_AttribDataType = (BSTR*)CoTaskMemAlloc(*a_Attrib_Count * sizeof(BSTR));
    *a_AttribAdvanceDataType = (BSTR*)CoTaskMemAlloc(*a_Attrib_Count * sizeof(BSTR));
     *a_attribfieldlength = (DWORD*)CoTaskMemAlloc(*a_Attrib_Count * sizeof(DWORD));
    //

    for(int i=0 ;itr_vectCategory != a_vectAttributes.end(); itr_vectCategory++, i++)
    {
        *((*a_AttribName)+i) = SysAllocString(itr_vectCategory->m_strAttributeName.c_str());
        *((*a_AttribId)+i) = itr_vectCategory->m_dwAttributeId;
        *((*a_AttribDescription)+i) = SysAllocString(itr_vectCategory->m_strAttributeDescription.c_str());
        *((*a_AttribDataType)+i) = SysAllocString(itr_vectCategory->m_strAttributeDataType.c_str());
        *((*a_AttribAdvanceDataType)+i) = SysAllocString(itr_vectCategory->m_strAttributeAdvanceDataType.c_str());
        *((*a_attribfieldlength)+i) = (itr_vectCategory->m_dwAttributeFieldLength);

    }

 return hr;
}

Это дает исключение во время выполнения кучи повреждения, я выделяю неправильно?Спасибо за помощь.

1 Ответ

0 голосов
/ 11 января 2012

Я не могу сказать вам, где ваша ошибка, но я бы предложил загрузить Средства отладки для Windows и затем , читая документы при включении отладки кучи страниц с помощью gflags программа, которая может позволить вам перехватить ошибку, где на самом деле происходит повреждение кучи.

...