преобразование из system :: String в std :: string - PullRequest
2 голосов
/ 28 января 2012

Для преобразования из system :: String в 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 *.Кто-нибудь знает, почему это случилось?

Спасибо.

1 Ответ

4 голосов
/ 28 января 2012

Причина, по которой работает версия std::string, заключается в том, что она немедленно создает закрытую копию значения char*. Эта частная копия не затронута более поздней FreeHGlobal.

Версии char* присваивается указатель на память, которую вы затем освобождаете на следующей строке. Недействительно в момент выполнения команды FreeHGlobal.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...