c - 从 void 指针访问结构成员时遇到问题。

标签 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);

}

现在,我的问题是我不知道如何从 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);

它无法编译,我一无所知!

任何帮助将不胜感激!

最佳答案

你的功能:

Queue_destroy(Queue *q)

需要一个队列*

所以,改变:

Queue_destroy((*(Process *)item).time_queue); // Here you are passing the object 

至:

Queue_destroy(&(((Process *)item)->time_queue));

假设item是指向您的struct Process的指针

关于c - 从 void 指针访问结构成员时遇到问题。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22824337/

相关文章:

C函数变量参数长度

c++ - 如何正确地将指向 blob 的 void 指针转换为结构指针?

arrays - 如何在 Arduino 中设置关联数据结构

将 void** 转换为 int 的二维数组 - C

c++ - 使 std::to_string 使用 void 指针,如 operator<<?

c - Typedef 结构导致程序崩溃

C编程将链表分成两半

c - __typeof 变量和 printf

在 c 中创建一个具有超过 1 个动态大小数组的结构?

c - 指针、列表和空值