代码之家  ›  专栏  ›  技术社区  ›  SonicN

realloc调用中的写入无效[已关闭]

  •  0
  • SonicN  · 技术社区  · 8 年前

    我对这段代码有点问题。

    size_t* defines = malloc(sizeof *defines);
    if (!defines)
        exit(1);
    
    size_t def_cap = 1;
    size_t def_size = 0;
    
    ...
    
    for(condition) {
        ...
    
        if (def_size == def_cap) {
            void* tmp = realloc(defines, def_cap*=2);
            if(!tmp)
                exit(1);
            defines = tmp;
        }
        defines[def_size++] = foo;
    }
    

    1 回复  |  直到 8 年前
        1
  •  3
  •   Ry-    8 年前

    realloc 需要很多字节,就像 malloc ,因此需要将条目数乘以 sizeof(size_t) 如前所述:

    def_cap *= 2;
    void* tmp = realloc(defines, def_cap * sizeof *defines);