【发布时间】:2014-05-14 11:55:27
【问题描述】:
我在 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);
它没有编译,我一无所知!
任何帮助将不胜感激!
【问题讨论】:
-
你sn-ps的代码缺少信息,一团糟。改为提供一个简单的可编译示例。
标签: c struct void-pointers