«Попытка чтения или записи защищенной памяти. Это часто свидетельствует о повреждении другой памяти». с GetPrivateProfileString - PullRequest
0 голосов
/ 22 декабря 2011

В настоящее время я пытаюсь получить некоторые управляемые строковые данные и использовать их для извлечения данных из INI-файла. Это прекрасно работает в режиме релиза, но когда я пытаюсь использовать отладку, я получаю исключение, указанное в теме. Ошибка возникает не при использовании вызова win32API, а при удалении памяти, связанной с его использованием. Мне интересно, если это потенциальный источник утечки памяти, поэтому я решил, что я спрошу здесь.

System::String ^ SettingsManager::LoadFromIniFile(System::String ^ strAppName,   System::String ^ strKeyName,  System::String ^ strDefault)
{
char * cAppName = ConvertToCharStringStandard(strAppName);
char * cKeyName = ConvertToCharStringStandard(strKeyName);
char * cDefault = ConvertToCharStringStandard(strDefault);
char cBuffer[500];

GetPrivateProfileStringA(cAppName, cKeyName, cDefault, (LPSTR)&cBuffer, 500, "Settings.ini");

System::String ^ strReturn = gcnew System::String(cBuffer);

try
{
    delete []cAppName; //<- Error occurs here.
    delete []cKeyName;
    delete []cDefault;
}
catch(System::Exception ^ e)
{
    System::String ^ message = e->Message;
}

return strReturn;
}

char * ConvertToCharStringStandard(System::String ^ stringToConvert)
{
pin_ptr<const wchar_t> wch = PtrToStringChars(stringToConvert);

size_t convertedChars = 0;
size_t  sizeInBytes = ((stringToConvert->Length + 1) * 2);
errno_t err = 0;
char *ch = new char[sizeInBytes];

err = wcstombs_s(&convertedChars, ch, (size_t)sizeInBytes, wch, (size_t)sizeInBytes);

return ch;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...