我正在尝试使用双指针使项目索引器能够通过其编号获得指向特定项目的指针。
我宁愿使用数组来完成此任务,但最大物品数量未知。 因此,我需要以某种方式通过索引进行访问。
在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
...
并能够发送特定项目
但是我陷入有关访问冲突的错误。
答案 0 :(得分:0)
也需要为双指针分配内存:
item_indexer = calloc(get_max_items(), sizeof(obj_t));
并修复解引用指针:
item_indexer[i] = item; // no need & here