我有一個通用的鏈表,看起來像這樣:麻煩鏈表使用「無效*」
queue.hpp
typedef struct queue_node
{
struct queue_node *next;
struct queue_node *prev;
void *data;
int32_t index;
} queue_node;
typedef struct queue
{
struct queue_node *head;
struct queue_node *tail;
struct queue_node *current;
int32_t max_entries;
int32_t num_entries;
} queue;
我想這將是簡單的,但我有使用void *數據來處理任意參數(通常是其他地方定義的自定義對象)非常困難。當我從節點抽取數據時,我嘗試將它作爲所需對象進行投射。在這種情況下,我試着投作爲proc_instruction讀回,我存儲在那裏的數據 - >段故障:
procsim.cpp:
while (total_instructions < 5000 && fscanf(proc_tf, "%x %d %d %d %d\n",
&p_inst->address,
&p_inst->type,
&p_inst->dst,
&p_inst->src[0],
&p_inst->src[1]) != EOF) {
trace_queue = append_node(trace_queue,p_inst); // stores p_inst in new trace_queue node
trace_queue->current = goto_queue_first(trace_queue);
p_inst = (proc_instruction*)trace_queue->current->data; // trying to get stored inst from trace_queue node
printf("%x %d %d %d %d\n",p_inst->address,p_inst->type, p_inst->dst, p_inst->src[0], p_inst->src[1]);
}
這裏是我追加數據(如果有幫助):
queue.cpp
queue *append_node(queue *app_q, void *app_data)
{
if(!queue_is_empty(app_q))
app_q->current = goto_queue_last(app_q);
queue_node *n = (queue_node *)emalloc(sizeof(*n));
n->prev = app_q->current;
n->next = app_q->tail;
app_q->current = goto_queue_last(app_q);
app_q->current->data = app_data;
app_q->num_entries++;
app_q->current->index = app_q->num_entries;
return app_q;
}
我看到那裏的人已經這樣做了示例代碼,但我似乎無法得到它。我必須在這裏犯一個根本的錯誤。謝謝你們/女孩。
「append_node」的目的是將新節點追加到列表尾部? –
是 - 然後返回帶有新節點的隊列。 – culight
n-> prev = app_q-> tail; app_q-> tail-> next = n; app_q-> tail = n; n> next = NULL;我認爲這是你想要的。 –