c - 如何在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--;
}
推荐阅读
- xcode - 删除 Github Repo 让我丢失了 Xcode 文件
- python - Python OpenCV 背景减法和边界框
- python - 为模型预测构建生成器
- python - 尝试在第 71 行运行 reindent.py 时出错
- powershell - 使用单个字符串在 PowerShell 中逐行读取文件
- java - spring boot中的初始化和调度
- node.js - 尝试从 Nodejs 中的 AWS Lambda 函数读取 S3 存储桶的内容时未获得结果
- html - Discord ShareX 配置生成器
- php - 致命错误:未捕获的 Google_Service_Exception Google Sheets API PHP 错误添加行
- git - git diff --staged 是否与 git diff --cached HEAD 相同?