c-Malloc/caloc分配已分配的地址



我已经试着调试了好几个小时了。


我有一个调度程序的结构。

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;
}

在拔了很久头发之后,我注意到两个不相关的变量同时发生了变化。事实证明,调度器->cp和调度器->queue->tail似乎共享一个内存地址。

相同地址现象图片

这里,s是rr_scheduler指针。

任何可能的原因都将不胜感激。

sizeof rr

是指针的大小。但是您需要为结构分配足够的内存。使用

sizeof *rr

sizeof(rr_scheduler)

这样做。

在程序中,您没有为结构分配足够的内存,因此在块的末尾进行写入,从而损坏堆。

rr初始化为NULL,然后立即分配给它,这似乎也很奇怪

rr_scheduler* rr = malloc(sizeof *rr);

相关内容

  • 没有找到相关文章

最新更新