Steve
Steve

Reputation: 3

C++ struct values lost

I have a strange issue. I allocate char[] values in struct array, but they get lost: ------- The struct is this one :

typedef struct _Settings
{
    const char* str;
    uint val;
}Settings;

------- I create it like this :

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;
}

..... at (1), I get the correct values.

But if I then call this (same place, right after the code above), the settings[i].str is empty:

for (int i = 0; i < nn; i++) {
        string teststr = settings[i].str;       ///// (2)
        std::cout << settings[i].str << "=" << settings[i].val << "\n";
    }

... at (2), I get empty.

Does anyone have a clue why? Thanks!

Upvotes: 0

Views: 404

Answers (1)

R Sahu
R Sahu

Reputation: 206667

The line at (1) is a problem because you are storing a pointer to some memory that is not valid when the loop ends.

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.

If you learning about low level language features, it's ok to experiment with using char* and raw memory. If you are trying to get a working program, just use std::string.

Also simplify the definition of Settings. You don't need all the typedef non-sense in C++.

struct Settings
{
    std::string str;
    uint val;
};

Upvotes: 2

Related Questions