我遇到了一个托管的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位版本上没有问题。知道这是怎么回事吗?
答案 0 :(得分:2)
delete[]
只能删除new[]
分配的内存。要在此处使用它,您需要确切地知道pPresentationCtx->GetStringValue
如何分配返回的内存,而且它似乎 not 通过new[]
- 因此崩溃。
我认为您正在使用的API提供了一个专门用于释放由其提供的函数创建的内存的函数。检查文档(如果是Win32,可能类似于GlobalFree
。)