C ++ struct值丢失了

时间:2017-12-25 20:16:13

标签: c++ arrays struct

我有一个奇怪的问题。我在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),我得到正确的值。

但是如果我然后调用它(相同位置,就在上面的代码之后),则设置[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 个答案:

答案 0 :(得分: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;
};