如何在c中释放一部分连续分配的内存?

How to free a part of contiguous allocated memory in c?

我是 C 的新手。我有一个程序使用存储指针的 calloc() 分配一些内存。这些指针指向内存中我存储人员数据的位置。每个人一个指针。所以当我需要删除数据时,我free()指向这些数据的指针。但是带有指针的内存仍然有那个。我也想释放那个地方。据我所知,例如,我不能说 free(ptr+5)。我该怎么做?

您不能释放已分配块的开头或中间,而单独留下已分配块的末尾;所以(用于删除数组中的条目):

  • 将您要删除的条目之后的所有内容移动到分配块的末尾,朝向分配块的开头;这样要删除的部分在最后

  • 使用realloc()减小分配块的大小(以释放末尾的块)。

狡猾的例子(假设 i 是您要释放的条目):

    memmove(&myArray[i], &myArray[i+1], (total_entries - 1 - i) * sizeof(myArray[0]) );
    temp = realloc(myArray, total_entries - 1 * sizeof(myArray[0]));
    if(temp == NULL) {
        /* Ooops. Need to handle the error somehow */
    } else {
        myArray = temp;
        total_entries--;
    }