deque push back error

c++, deque

Solution

for (int i = 0; i < 4; i++)
{
  string label = prefix + classname + "." + methodname[i];
  names.push_back(label.c_str()); //what you're pushing? a temporary!

} //<--- `label` is destroyed here and it's memory is freed.

Here `label` is a variable which gets destroyed at the closing brace and gets created again, in each iteration.

That means, what you're pushing to `names` is a temporary value. That is causing the problem.

I would suggest you to use this:

std::deque<std::string> names;

then do this:

names.push_back(label); //a copy is pushed to the deque!

Problem

I am writing a compiler and use deque to store methods labels of a class and here's the sample code: ``` #include <deque> #include <iostream> #include <string> using std::cout; using std::deque; using std::endl; using std::string; int main() { deque<const char *> names; string prefix = "___"; const char *classname = "Point"; const char *methodname[] = {"Init", "PrintBoth", "PrintSelf", "equals"}; for (int i = 0; i < 4; i++) { string label = prefix + classname + "." + methodname[i]; names.push_back(label.c_str()); } for (int i = 0; i < 4; i++) cout << names[i] << endl; return 0; } ``` However, the result is not what I've expected: ``` ___Point ___Point.PrintSelf ___Point.PrintSelf ___Point.equals ``` Also, I noticed if I simply push back the methodname ``` names.push_back(methodname[i]) ``` I get all the methodnames in order. What have I done wrong here?

Original source