我有一个类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。我该怎么办?
答案 0 :(得分:4)
你不能使用这样的字符指针 - 你需要为它们分配存储空间。但是当你使用C ++时,你应该删除它们并用std :: string类的实例替换它们,这将为你管理存储。
答案 1 :(得分:1)
正如Neil Butterworth的回答所暗示的那样,问题可能不在于这段代码,而在于你所谓的代码。使用字符指针不会让事情变得不可能,只是更难。
在这种情况下,问题肯定是而不是与push_back。如果您发布了调用此代码的方法,则可能会看到确切的错误。