无法从void指针访问struct成员。

时间:2014-04-02 22:30:28

标签: c struct void-pointers

我在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);

它没有编译,我无能为力!

非常感谢任何帮助!

1 个答案:

答案 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

的指针