我在 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/