【发布时间】:2011-12-14 10:11:50
【问题描述】:
我不熟悉 C++/CLI,所以不知道在使用下面的代码时如何释放内存(得到了解决方案 here 并稍作修改):
char* ManagedStringToUnmanagedUTF8Char( String^ s )
{
array<unsigned char> ^bytes = Encoding::UTF8->GetBytes( s );
pin_ptr<unsigned char> pinnedPtr = &bytes[0];
return (char*)pinnedPtr;
}
当我通过在文本文件中写入字符来测试上面的代码时,它是有效的。如果我遗漏了什么(需要清理 pinnedPtr?),请告诉我。
现在当我使用它时:
char* foobar = ManagedStringToUnmanagedUTF8Char("testing");
//do something with foobar
//do I need to free up memory by deleting foobar here?
//I tried 'delete foobar' or free(foobar) but it crashes my program
【问题讨论】:
-
这显然是 Visual-C++ 中的一些语言扩展
-
这不行,当函数返回时,数组将被取消固定。之后垃圾收集器可以移动数组并使您的程序随机失败。你必须复制它。
标签: visual-c++ utf-8 c++-cli