Realloc:结构的动态向量中的下一个大小无效

时间:2013-11-20 13:34:48

标签: c vector realloc

我正在尝试使这段代码正常工作,但我无法理解它崩溃的原因。它应该从文件中读取数据,并将其排序(插入排序)在向量中。 proc是Process_t的向量,proc.name是char [10],proc [0]插入之前(硬编码)和num_proc == 1.文件的第一个寄存器被正确捕获,但随后它崩溃(只是在realloc()中。

    size = 1
    while(size > 0)
    {
        // Read a process from the config file and add to the vector in a sorted way
        printf("%d\n", num_proc);
        proc = realloc(proc, sizeof(Process_t)*num_proc);
        printf("%d\n", num_proc);

        size = fscanf(cfgfd, "%hhd %s\n", &hwmodid, buf);
        printf("%d %d %s\n", num_proc, hwmodid, buf);

        i = num_proc-1;
        while(i > 1 && proc[i].hwmodid > hwmodid)
        {
            strcpy(proc[i+1].name, proc[i].name);
            proc[i+1].hwmodid = proc[i].hwmodid;
            proc[i+1].pid = proc[i].pid;
            proc[i+1].fiforfd = proc[i].fiforfd;
            proc[i+1].fifowfd = proc[i].fifowfd;
            proc[i+1].paused = proc[i].paused;
            --i;
        }
        strcpy(proc[i+1].name, buf);
        proc[i+1].hwmodid = hwmodid;
        proc[i+1].pid = -1;
        proc[i+1].fiforfd = -1; 
        proc[i+1].fifowfd = -1;
        proc[i+1].paused = 0;
        ++num_proc;

        printf("%d %s %d %d %d %d %d\n", i, proc[num_proc-1].name, proc[num_proc-1].hwmodid, proc[num_proc-1].pid, proc[num_proc-1].fiforfd, proc[num_proc-1].fifowfd, proc[num_proc-1].paused);
    }

1 个答案:

答案 0 :(得分:0)

我刚刚意识到我在重新分配时错过了+1。我正在分配我已经拥有的东西(起初我有1个,分配为1并插入1)。向量插入的矢量的第一个元素是运气。愚蠢的错误很难找到。