?
Hallo
Ich bekomme immer folgende Exception:
Unhandled exception at 0x004fba16 in BLM-Editor.exe: 0xC0000005: Access violation reading location 0x00d5a2ac.
und lande hier im Code:
void Release() throw()
{
ATLASSERT( nRefs != 0 ); //genau hier
if( _AtlInterlockedDecrement( &nRefs ) <= 0 )
{
pStringMgr->Free( this );
}
}
wenn ich folgenden Code in der OnInitDialog stehen habe. Wenn ich auskommentiere läuft alles.
CStringArray TempNames;
Country TempCountry;
Ini.GetKeyNames(_T("Countries"), &TempNames);
for(int i=0; i<TempNames.GetSize(); ++i)
{
Ini.GetDataBlock(_T("Countries"), TempNames[i], (LPVOID)&TempCountry ,sizeof(Country));
Ich aufgerufene und nicht von mir stammende Funktion der Klasse CIni sieht so aus:
DWORD CIni::GetDataBlock(LPCTSTR lpSection, LPCTSTR lpKey, LPVOID lpBuffer, DWORD dwBufSize, DWORD dwOffset) const
{
LPTSTR psz = __GetStringDynamic(lpSection, lpKey);
DWORD dwLen = _tcslen(psz) / 2;
if (dwLen <= dwOffset)
{
delete [] psz;
return 0;
}
// verify psz, must be all in hex format
for (int i = 0; psz[i] != _T('\0'); i++)
{
TCHAR c = psz[i];
if ((c >= _T('0') && c <= _T('9'))
|| (c >= _T('a') && c <= _T('f'))
|| (c >= _T('A') && c <= _T('F')))
{
// valid
}
else
{
delete [] psz;
return 0;
}
}
DWORD dwProcLen = 0;
LPBYTE lpb = (LPBYTE)lpBuffer;
if (lpb != NULL)
{
dwProcLen = min(dwLen - dwOffset, dwBufSize);
LPCTSTR p = &psz[dwOffset * 2];
for (DWORD i = 0; i < dwProcLen; i++)
{
TCHAR sz[3] = _T("");
_tcsncpy(sz, p, 2);
lpb[i] = BYTE(_tcstoul(sz, NULL, 16));
p = &p[2];
}
}
else
{
dwProcLen = dwLen - dwOffset;
}
delete [] psz;
return dwProcLen;
}
Ich freue mich auf Anregungen.
chrische