繁体   English   中英

如何释放 c 中连续分配的 memory 的一部分?

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

我是 C 的新手。 我有一个程序,它使用存储指针的calloc()分配一些 memory。 这些指针指向 memory 中我存储人员数据的位置。 每个人一个指针。 所以当我需要删除数据时,我free()指向这些数据的指针。 但是带有指针的 memory 仍然有那个。 我也想解放那个地方。 据我所知,例如,我不能说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--;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM