Удаление указателя wchar_t дает сбой при 64-битной сборке - PullRequest
0 голосов
/ 10 ноября 2009

У меня есть управляемая библиотека c ++, которая аварийно завершает работу, когда встречается оператор delete, но происходит сбой только в 64-разрядной сборке. Код:

LPWSTR pwmsURL = NULL;
pPresentationCtx->GetStringValue(L"WMS_PRESENT_ORIGINAL_REQUEST_NAME", 17, &pwmsURL, 0);
String^ wmsURL = gcnew String(pwmsURL);
//this delete is the problem line...
delete [] pwmsURL;

Если я закомментирую удаление, все работает нормально, но я не хочу создавать утечку памяти. Нет проблем на 32-битной сборке. Есть идеи, что с этим происходит?

1 Ответ

2 голосов
/ 10 ноября 2009

delete[] может удалить только память, выделенную new[]. Чтобы использовать его здесь, вам нужно точно знать, как pPresentationCtx->GetStringValue выделил возвращаемую память, и это похоже на , а не через new[] - отсюда сбой.

Я полагаю, что используемый вами API предоставляет функцию, специально предназначенную для освобождения памяти, созданной предоставляемыми им функциями. Проверьте документацию (это может быть что-то вроде GlobalFree, если это Win32).

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