【发布时间】:2014-07-01 09:23:30
【问题描述】:
我已经尝试调试了好几个小时。
我有一个调度程序的结构。
typedef struct rr_scheduler {
unsigned int time_q;
unsigned int avg_wait;
unsigned int avg_turnaround;
unsigned int processes_served;
unsigned int t;
unsigned int next_dispatch_t;
Process* cp;
LinkedList* queue;
LinkedList* done_list;
} rr_scheduler;
它正在被初始化:
rr_scheduler* new_rr_scheduler(unsigned int time_q) {
rr_scheduler* rr = NULL;
rr = (rr_scheduler*)malloc(sizeof rr);
rr->time_q = time_q;
rr->queue = newLinkedList();
rr->done_list = newLinkedList();
rr->avg_wait = 0;
rr->avg_turnaround = 0;
rr->processes_served = 0;
rr->t = 0;
rr->next_dispatch_t = 0;
rr->cp = NULL;
return rr;
}
这里是linkedList初始化函数。 (是的,我知道如果我使用 calloc,我不需要将值设置为 null)
LinkedList* newLinkedList() {
LinkedList* newList = (LinkedList*)calloc(1, sizeof (LinkedList));
newList->head = NULL;
newList->tail = NULL;
newList->current = NULL;
newList->length = 0;
return newList;
}
在拉了我的头发很长时间后,我注意到两个不相关的变量同时发生了变化。 事实证明,scheduler->cp 和 scheduler->queue->tail 似乎共享一个内存地址。
Picture of same address phenomenon
这里,s 是一个 rr_scheduler 指针。
任何可能的原因将不胜感激。
【问题讨论】:
-
calloc()之后不需要将内容初始化为 NULL/0 - 但也许您只是为了清楚起见才添加的。
标签: c pointers memory malloc calloc