我在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);

当您不再需要它时,可以避免内存泄漏。

08-16 11:47