c ++ push_back不能正常工作

时间:2010-06-12 07:20:01

标签: c++ stl

我有一个类symbol_table,它有另一个类的对象向量row_st.also我有一个enter方法,其中row_st的对象带有传递的名称,插入到所需symbol_table的向量中。但是当我调用enter来输入对象时名字: a; b; c;我将得到以下结果:a,b,c; b,c; c.veve的第一个元素获取所有输入对象的名称。第二个元素也获得后面条目的名称。

  class row_st
  {
   public:
      char* name;
      type_u type;//int:0,flaot:1;char:2,bool:3,array:
      int offset;
      symbol_table *next;
      symbol_table *current;
  };
  class symbol_table
  {
   public:
    vector <row_st *> row;
     int type;
     int header;
     int starting_stmt;
     int index;
     int i;
     symbol_table *previous;
     symbol_table(){ header=0;
      previous=0; index=0;i=0;starting_stmt=0;}
  };

这里是输入法:

 int enter(symbol_table *table,char* name,type_u type){
     row_st *t=new row_st;
t->name=name;
t->type=type;
t->offset=table->index;
t->current=table;
table->index++;
t->next=0;
table->row.push_back(t);
table->header +=1;
return table->row.size()-1;
   }

push_backed元素都指向同一个地址。每次调用时,新调用都会生成相同的row_st。我该怎么办?

2 个答案:

答案 0 :(得分:4)

你不能使用这样的字符指针 - 你需要为它们分配存储空间。但是当你使用C ++时,你应该删除它们并用std :: string类的实例替换它们,这将为你管理存储。

答案 1 :(得分:1)

正如Neil Butterworth的回答所暗示的那样,问题可能不在于这段代码,而在于你所谓的代码。使用字符指针不会让事情变得不可能,只是更难。

在这种情况下,问题肯定是而不是与push_back。如果您发布了调用此代码的方法,则可能会看到确切的错误。