commodity_list是类型项的向量,类型项有2个向量,一个是类型买方,另一个是卖方。所以基本上发生的事情可能是他们都在这里共享本地对象的内存。显然C中的复制构造函数是不可能的......那么我该如何处理呢? btw..vector有会员" void ** obj"。我知道这在C ++中会更好,但我没有那么奢侈
if(b->location->commodity != NULL){
trader s;
s.store = b->location;
s.distance = i;
int index = search_items(commodity_list, b->location->commodity->name);
if(index == -1){ //this is a new commodity, not found in commodity list
item it; //create a new commodity in list
v_init(&it.sellers);
v_init(&it.buyers);
it.name = b->location->commodity->name;
if(b->location->type == LOCATION_SELLER){
v_add(&it.sellers, &s); //add buyer/seller to list of patrons in said commodity
} else {
v_add(&it.buyers, &s);
}
v_add(commodity_list, &it); // add commodity to list of commodities
} else { //add seller/buyer to existing item in the commodity list
item* it = ((item*)v_get(commodity_list, index));
if(b->location->type == LOCATION_SELLER){
v_add(&it->sellers, &s);
} else {
v_add(&it->buyers, &s);
}
}
}
答案 0 :(得分:2)
在C中,没有像C ++那样的官方参考概念。
您正在尝试插入未动态分配的对象。因此,对象在函数范围的末尾自动销毁。
因此,您必须malloc
您的主体item
和trader
对象将它们存储在程序的任何位置,并列在您的列表中。