C++ 结构值丢失

标签 c++ arrays struct

我有一个奇怪的问题。我在结构数组中分配 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/

相关文章:

丙 |以计数器命名的结构

c++ - 为什么 C++11 不像 C99 那样支持指定的初始值设定项列表?

c++ - 从包含不同对象的 vector 中,如何调用正确的函数?

javascript - 推送复合数组元素

c - 错误 : expected expression before ‘st’

由其成员选择一个随机结构

c++ - 将 char 转换为 int '23' > 23

c++ - 无法在不使用 RTTI 构建 LLVM 的情况下链接 LLVM 编译器教程程序

c++ - 冒泡排序无法正常工作

java - 数组。直方图,将数组划分为子集并计算每组中的元素数量。 java