2009-11-09 38 views
0

我遇到了一个托管的C++库,当遇到delete语句时会崩溃,但它只会在64位版本上崩溃。代码是:在64位版本上删除wchar_t指针崩溃

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位版本没有问题。任何想法这是怎么回事?

回答

2

delete[]只能删除由new[]分配的内存。要在这里使用它,你需要知道如何pPresentationCtx->GetStringValue分配返回的内存,它看起来而不是通过new[] - 因此崩溃。

我想象你正在使用的API提供了一个专门用于释放由其提供的函数创建的内存的函数。检查文档(如果是Win32,可能是GlobalFree)。

+0

谢谢 - 回去并挖掘到文档,它确实使用CoTaskMemAlloc/CoTaskMemFree。 – flatline 2009-11-09 22:01:38