c - 这个 free() 函数会清理内存吗?
问题描述
我需要你的帮助,因为我不知道我是否真的释放了分配的内存。如果您能为此目的建议我一些工具,我也将非常感激。谢谢!PS 你可以跳过 bb_sort 和 swap 函数。
#include <stdio.h>
#include <stdlib.h>
typedef struct DArray{
double * array;
int size;
} DArray;
void getArrays(DArray * arrays, int numOfArrays){
int curArraySize, i;
while(numOfArrays >= 0){
printf("Input size of array: "); scanf("%d", &curArraySize);
if(arrays[numOfArrays].array = (double*)malloc((arrays[numOfArrays].size = curArraySize)*sizeof(double))){
for(i = 0; i < arrays[numOfArrays].size; ++i)
arrays[numOfArrays].array[i] = rand()%100;
--numOfArrays;
}
else{
printf("Error, have no enough memory in the system!"); break;
}
}
}
void swap(double * arr, int pos1, int pos2) {
int tmp = arr[pos1];
arr[pos1]=arr[pos2];
arr[pos2]=tmp;
}
double * bb_sort(double * arr, int size){
int i, j, noChanges = 1;
while(1){
for(i = 0;i < size;++i){
for(j = 0;j < size-1;++j){
if(arr[j] < arr[j+1]){
swap(arr, j, j+1);
noChanges = 0;
}
}
if(noChanges) return arr;
noChanges = 1;
}
}
}
int main() {
srand (time (NULL));
int numOfArrays, i, j;
printf("Input number of arrays: "); scanf("%d", &numOfArrays);
DArray arrays[numOfArrays];
getArrays(arrays ,numOfArrays-1);
for(i = 0; i < numOfArrays; ++i){
bb_sort(arrays[i].array, arrays[i].size);
}
for(i = numOfArrays-1; i >= 0; --i){
printf("\nSorted array num#%d\n", i+1);
for(j = 0; j < arrays[i].size; ++j)
printf(" %.1lf ", arrays[i].array[j]);
free(arrays[i].array); <------FREE MEMORY?
printf("\n");
}
printf("Done!");
while(1){
}
return 0;
}
==================================================== ==================================================== =
解决方案
简短回答:OP 询问“内存是否已清理”。从技术上讲,免费实现不需要清理内存(例如,将数据设置为零或一些随机数据)。大多数实现不会清除内存以节省时间。
如果代码错误地尝试读取数据,它通常会发现数据仍在内存中,可能会被 free 调用或其他代码修改,这些代码已将释放的内存分配给其他任务。
对于安全敏感信息(密码、信用卡号、私钥),通常在免费呼叫之前将数据归零,或者用其他模式填充区域。这将使其更难/降低数据被错误、错误或黑客访问的风险。
一些内存调试器将用模式数据/保护/等填充释放的内存,以帮助更早地检测内存问题。
推荐阅读
- linux - 在Unix中递归列出文件中的所有文件?
- r - 从 RMarkdown 生成的 PDF 复制粘贴文本?
- woocommerce - 将 woocommerce 购物车限制为来自一个特定类别的一件商品,但允许来自其他类别的无限商品
- github-pages - GitHub 页面 - 临时站点
- javascript - JavaScript onbeforeunload 在选项卡关闭而不是浏览器时执行
- angular - 尝试通过 ts-patch 在 Angular 项目中使用 ts-nameof
- python - 使用 train_test_split 后分类器准确率为 100%
- c++ - 二进制搜索程序返回不需要的值
- c - Makefile路径创建
- python - 解析不同的结构化xml