gpt4 book ai didi

c++ - 函数结束后值发生变化

转载 作者:行者123 更新时间:2023-11-28 05:46:18 25 4
gpt4 key购买 nike

我正在尝试设置需要在应用程序的另一个文件(层)中使用的数据。在调试过程中,我第一次看到该值设置正确。但是当我尝试在函数之后使用这个设置变量时,值被改变了。我认为内存正在释放导致变量重置。任何人都可以帮助我完成我正在尝试做的事情。

void SetExpectedTabsData(_In_ PCWSTR tabUrls[], _In_ PCWSTR tabTitles[], _In_ UINT tabsCount, _In_ FakeCourier* courier)
{
wchar_t jsonPerTab[256];
wchar_t tabsDataJSON[c_jsonTabDataSize];
// tabsDataJSON should be large enough to hold any data.
StringCchPrintf(tabsDataJSON, c_jsonTabDataSize, L"\"tabs\":[");
bool isActiveTab = true;
// tabId starts from 1 and the tabIndex starts with 0. Manipulated the json string generation accordingly.
for (unsigned int i = 1; i <= tabsCount; ++i)
{
StringCchPrintf(jsonPerTab, ARRAYSIZE(jsonPerTab), L"{\"id\":%i,\"index\":%i,\"windowId\":1,\"active\":%s,\"status\":\"complete\",\"title\":\"%s\",\"url\":\"%s\"}", i, (i - 1), isActiveTab ? L"true" : L"false", tabTitles[i - 1], tabUrls[i - 1]);
StringCchCat(tabsDataJSON, c_jsonTabDataSize, jsonPerTab);
isActiveTab = false;
if (i != tabsCount)
{
StringCchCat(tabsDataJSON, c_jsonTabDataSize, L",");
}
}
StringCchCat(tabsDataJSON, c_jsonTabDataSize, L"],");
VERIFY_SUCCEEDED(courier->SetExpectedTabsData(tabsDataJSON));
}

需要设置数据的 express 文件如下

HRESULT FakeCourier::SetExpectedTabsData(_In_ wchar_t* tabsData)
{
m_tabsData = tabsData;
return S_OK;
}

请建议执行此操作的正确方法。

最佳答案

tabsDataJSON 变量在函数 SetExpectedTabsData 中是局部的,因此可以在该函数完成后覆盖它。既然它可能发生,它就会发生。

当您调用 FakeCourier::SetExpectedTabsData(tabsDataJSON) 时,此函数只记住指向该局部变量 tabsDataJSON 的指针。但是在 SetExpectedTabsData 函数完成后,这个指针就变得无效了。

要修复它,您需要修改函数 FakeCourier::SetExpectedTabsData:将指针的复制替换为指向数据的复制。由于您的 m_tabsData 是一个 wchar_t*,只需分配此字符串并将数据从 tabsData 复制到 m_tabsData(读取关于 wcsncpy 和类似的功能)。

尝试这样的事情:

HRESULT FakeCourier::SetExpectedTabsData(_In_ wchar_t* tabsData)
{
const size_t len = wcslen(tabsData);
if (m_tabsData)
delete m_tabsData;
m_tabsData = new wchar_t[len + 1];
wcsncpy(m_tabsData, tabsData, len + 1);
return S_OK;
}

并且您还需要在 FakeCourier 的析构函数中释放此内存(以避免内存泄漏)。并在构造函数中初始化m_tabsData (m_tabsData = 0;)

关于c++ - 函数结束后值发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36124244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com