我在C方面没有太多经验,而且我对大多数人来说可能很简单。基本上,我有这种结构,定义了一个'泛型'具有调整大小数组实现的队列:
typedef void (*free_fptr)(void *);
typedef struct {
void **queue; // pointer to generic type
size_t first; // head index in array
size_t last; // tail index in array
size_t size; // number of elements
size_t capacity; // capacity of array
size_t elem_size; // size in bytes of each element in queue
free_fptr deleter; // function used to free each element
} Queue;
现在,我有一个我想要放入队列的数据类型:
typedef struct {
Process_state state;
Queue time_queue;
unsigned int start_time;
unsigned int id;
} Process;
我还有一个功能' Queue_destroy(Queue * q)'当我需要释放队列中的每个元素时,我想调用它:
void
Queue_destroy(Queue *q)
{
size_t i;
for (i = 0; i < q->size; ++i) {
q->deleter(q->queue[(q->first + i) % q->capacity]);
}
free(q->queue);
}
现在,我的问题是我不知道访问过程&#39;从void指针排队队列。例如:
void
Process_deleter(void *item)
{
// Here I want to access the queue inside (Process *)item
free((Process *)item);
}
我尝试了许多没有成功的事情,例如:
Queue_destroy((*(Process *)item).time_queue);
Queue_destroy((Process *)item->time_queue);
它没有编译,我无能为力!
非常感谢任何帮助!
答案 0 :(得分:1)
你的职能:
Queue_destroy(Queue *q)
需要Queue*
所以,改变:
Queue_destroy((*(Process *)item).time_queue); // Here you are passing the object
为:
Queue_destroy(&(((Process *)item)->time_queue));
假设item
是指向struct Process