静态LPTSTR变量在函数执行后丢失值

Nur*_*yev 1 c++ function lptstr

我正在Visual Studio 2013上编写C++ DLL.我的dll应该从ini文件中读取参数.所以,我为此创建了一个函数(ReadConnectionSettings()).我的静态变量serverIP在函数工作期间正确获取值,但是一旦函数完成运行,变量(serverIP)就会丢失其值.什么似乎是问题?

static LPTSTR   serverIP = _TEXT("");

void ReadConnectionSettings()
{
    TCHAR url[256];

    GetPrivateProfileString(_T("Connection"), _T("Url"), _T(""), url, 256, NameOfIniFile);

    serverIP = url;

}
Run Code Online (Sandbox Code Playgroud)

Bal*_*ick 5

您将指针指向serverIP堆栈内存url.

当函数退出时,这超出范围,因此指针指向垃圾.

你可以做的是改造serverIP缓冲区,然后 URL 复制到其中.然后它会坚持下去.

那是:

 static TCHAR serverIP[256] = _TEXT("");
Run Code Online (Sandbox Code Playgroud)

然后:

 _tcsnccpy(serverIP, url, 255);
Run Code Online (Sandbox Code Playgroud)

或者@DavidOtano建议,您可以保留现有的serverIP指针,并使用:

 serverIP = _tcsdup(url);
Run Code Online (Sandbox Code Playgroud)

但是如果你这样做,你就是动态分配内存,所以需要记住调用:

 free(serverIP);
Run Code Online (Sandbox Code Playgroud)

当你不再需要它时,避免内存泄漏.