我在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;
}
最佳答案
您将指针serverIP
指向堆栈存储器url
。
当函数退出时,这超出了范围,因此您的指针指向垃圾。
您可以做的是将serverIP
改为一个缓冲区,然后将URL复制到其中。然后它将持续存在。
那是:
static TCHAR serverIP[256] = _TEXT("");
然后:
_tcsnccpy(serverIP, url, 255);
或者按照@DavidOtano的建议,可以保留现有的serverIP指针,并使用:
serverIP = _tcsdup(url);
但是,如果这样做,则会动态分配内存,因此需要记住调用:
free(serverIP);
当您不再需要它时,可以避免内存泄漏。