在结构上创建双指针以按索引使用(如数组,但最大大小未知)

时间:2019-02-13 21:38:31

标签: c pointers

我正在尝试使用双指针使项目索引器能够通过其编号获得指向特定项目的指针。

我宁愿使用数组来完成此任务,但最大物品数量未知。 因此,我需要以某种方式通过索引进行访问。

在VS中,我收到错误消息“访问冲突写入位置0x0000000000000000”

typedef struct {
  char * data_3;
  int   data_1;
  float data_2;
  // and other data, doesnt matter
}obj_t;

void process_item(obj_t * input_item)
{
   // do something...
}

obj_t * create_new_item()
{
    obj_t * local_obj;
    // do something...
    return local_obj;
}

int get_max_items()
{
    return 8; // just some number, which can be set from outside
}

int main()
{
    int i;
    obj_t * item = NULL;
    obj_t ** item_indexer = NULL;

    for (i = 0; i < get_max_items(); i++)
    {
        item = create_new_item(); // create different items
        item_indexer[i] = &item;  // Error: access violation writing location 0x0000000000000000
    }

    process_item(item_indexer[i]); // need send item with specific index
}

我希望像数组一样使用它:

item_indexer[0] is (*item) created at i = 0
item_indexer[1] is (*item) created at i = 1
...

并能够发送特定项目

但是我陷入有关访问冲突的错误。

1 个答案:

答案 0 :(得分:0)

也需要为双指针分配内存:

item_indexer = calloc(get_max_items(), sizeof(obj_t));

并修复解引用指针:

item_indexer[i] = item; // no need & here