我有一个奇怪的问题。我在结构数组中分配 char[] 值,但它们丢失了: ------ 结构是这样的:
typedef struct _Settings
{
const char* str;
uint val;
}Settings;
-------- 我是这样创建的:
int nn=10;
settings = new Settings[nn];
for (int i = 0; i < nn; i++) {
string strr = "thisOneIs";
strr.append(std::to_string(i));
settings[i].str = strr.c_str();
string teststr = settings[i].str; //// (1)
settings[i].val = i + 1;
}
..... 在 (1) 处,我得到了正确的值。
但是如果我调用它(同一个地方,就在上面的代码之后),settings[i].str 是空的:
for (int i = 0; i < nn; i++) {
string teststr = settings[i].str; ///// (2)
std::cout << settings[i].str << "=" << settings[i].val << "\n";
}
... 在 (2) 处,我变空了。
有人知道为什么吗?谢谢!
最佳答案
(1) 处的行是一个问题,因为您正在存储指向某个内存的指针,该内存在循环结束时无效。
string strr = "thisOneIs"; // A temporary object in the loop.
strr.append(std::to_string(i));
settings[i].str = strr.c_str(); // Pointer that won't be valid when the loop ends.
如果您学习低级语言功能,可以尝试使用 char*
和原始内存。如果你想获得一个工作程序,只需使用 std::string
。
还简化了Settings
的定义。您不需要 C++ 中的所有 typedef
废话。
struct Settings
{
std::string str;
uint val;
};
关于C++ 结构值丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47971742/