В настоящее время я пытаюсь получить некоторые управляемые строковые данные и использовать их для извлечения данных из 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;
}