2012-01-28 30 views
2

从系统转换::字符串转换为std ::到的std :: string,我使用下面的代码:从系统::串串

IntPtr p = Marshal::StringToHGlobalAnsi(PORT); 
string newString = static_cast<char*>(p.ToPointer()); 
Marshal::FreeHGlobal(p); 

然而,当我得到了的地方代码使用

IntPtr p = Marshal::StringToHGlobalAnsi(PORT); 
char* newString = static_cast<char*>(p.ToPointer()); 
Marshal::FreeHGlobal(p); 

出于某种原因,虽然,我得到垃圾newString,如果我做的char *版本。任何人都知道为什么会发生?

谢谢。

回答

4

std::string版本的作品的原因是因为它会立刻创建char*值的privatecopy。这个私人副本不受后面FreeHGlobal的影响。

char*版本分配一个内存指针,然后你就非常下一行免费。在执行FreeHGlobal命令时无效。

+0

有道理!谢谢。 – 2012-01-28 03:48:36