2012-01-28 32 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