gpt4 book ai didi

c++ - 构建一个 char* vector

转载 作者:太空宇宙 更新时间:2023-11-04 15:18:28 25 4
gpt4 key购买 nike

我正在尝试构建一个 vector ,并且据说 vector 中的每个 char* 都是不同的。这是代码:

static char *StatsManager::_statsOption[4] = {"min", "max", "mean", "stddev"};

void BuildStatsNameList(long ChanIdx)
{
for (int m = 0; m < 4; m++)
{
std::string statsName(StatsManager::_statsOption[m]);

for (int n = 0; n < 1; n++)
{
statsName += "_";
statsName += std::to_string(ChanIdx);
statsName += "_";
statsName += std::to_string(n);
//sprintf (statsName, "s%_%d_%d", StatsManager::_statsOption[m],ChanIdx, n);
StatsManager::_statsNameList.push_back((char*)statsName.c_str());
}
}
}

但是,我注意到 statsName 中的 char* (statsName ) 最终会变得相同。例如在循环之后,StatsManager::_statsNameList 变为

stddev_1_0
stddev_1_0
stddev_1_0
stddev_1_0

……

相反,我希望它是

min_1_0
max_1_0
mean_1_0
stddev_1_0

有人知道如何避免 statsName 被一次又一次地覆盖吗?谢谢。

最佳答案

您的程序的行为是未定义的,因为您正在访问指向在 BuildStatsNameList 函数中分配的内存的指针,该函数在 BuildStatsNameList 返回给调用者时已被释放。

void BuildStatsNameList(long ChanIdx)
{
for (int m = 0; m < 4; m++)
{
std::string statsName( ...option[m]); // local variable
_statsNameList.push_back( (char*)statsName.c_str()); // no problem so far
}
}
}

// but here _statsNameList holds pointers to invalid memory

考虑使用 std::vector< std::string>相反或使用 strdup这将为您将 c 字符串复制到新位置(如果您绝对必须坚持使用 char*)。

关于c++ - 构建一个 char* vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25775261/

25 4 0
文章推荐: javascript - JQUERY/JAVASCRIPT - 需要使用 JavaScript 代码从 jquery 对话框的