c - Realloc:结构动态 vector 中的下一个大小无效

标签 c vector realloc

我试图让这段代码工作,但我不明白它为什么崩溃。它应该从文件中读取数据,并将其排序(插入排序)到 vector 中。 proc 是 Process_t 的 vector ,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。我正在分配我已有的内容(起初我有 1 个,正在分配 1 并插入 1)。动态插入的 vector 的第一个元素是靠运气插入的。很难发现的愚蠢错误。

关于c - Realloc:结构动态 vector 中的下一个大小无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20097418/

相关文章:

c - TCP 服务器崩溃

c - 在 c 中使用 sprintf 格式化字符串

c++ - 基础对象和继承对象的 vector

c++ - 运算符重载使用 * 和 *= 作为点积或叉积

c - 分配太少的空间是否安全(如果你知道你不需要它)?

c - 长正整数和搜索的结果以及数组中的元素

c++ - 为什么 C++ 用零初始化 std::vector 而不是 std::array?

c - 从用户读取未知长度的字符串(工作一次并停止)

c++ - 如何在不使用 realloc 的情况下使用 new 和 delete C++ 时释放动态数组?

c - fscanf() 和 realloc() - 将文件读取到矩阵