我正在尝试存储来自
的值KeyDerivation.Pbkdf2
进入一个const char *变量 - 在.h文件中声明 - 以这种方式:
vector<vector<string>> data;
当我调试程序时,我注意到变量heightmapName = data[0][1].c_str();
返回此
heightmapName
但是,如果我声明一个新的heightmapName 0xcdcdcdcd <Error reading characters of string.> const char *
并将其初始化为:
const char*
const char* what = data[0][1].c_str();
heightmapName = data[0][1].c_str();
变量可以很好地存储数据,而what
却没有。
这是功能:
heightmapName
为什么会这样?我该如何解决这个问题?
PS。我正在使用视觉工作室2017
答案 0 :(得分:1)
无论问题或实施方式如何,假设heightmapName
的类型确实是const char *
,那就不起作用。
data
的生命周期受fileParser生命周期的约束。见What is std::string::c_str() lifetime?
因此,在该函数结束时,data[0][1].c_str()
指向的数据将无效。
如果需要,请考虑复制数据。或者将heightmapName设为std :: string。
(附加提示:如果它是指针,请考虑应用五条规则:How to actually implement the rule of five? - 避免手动内存管理的另一个原因)
一般情况下,我通过使用智能指针或为我管理内存的结构(例如std :: string)来避免C ++类中的原始指针,这意味着我不需要担心3的规则或规则5因为我不需要手动管理这些资源。
更新:你提到它&#34;工作&#34;为你(现已删除)的要点。
在生命周期结束后访问类似的内存是未定义的。一种行为很可能是它神奇地#34;工作&#34;。最有可能的是,记忆还没有被覆盖。