我应该如何在C中向我的向量添加对象?

时间:2017-05-25 07:40:24

标签: c pointers vector

您在以下代码的位置看到的

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

1 个答案:

答案 0 :(得分:2)

在C中,没有像C ++那样的官方参考概念。

您正在尝试插入未动态分配的对象。因此,对象在函数范围的末尾自动销毁。

因此,您必须malloc您的主体itemtrader对象将它们存储在程序的任何位置,并列在您的列表中。

See there