我对 C 还很陌生,我遇到了这个问题: 我正在定义一个带有二维数组及其行和列的结构
// Structure to represent a 2D array of integers with the given dimensions
typedef struct {
int **data;
int rows;
int cols;
} Array2D;
// Creates a 2D array with the given dimensions and initial value
Array2D *create2DArray(int rows, int cols, int initialValue) {
Array2D *array = malloc(sizeof(Array2D));
array->rows = rows;
array->cols = cols;
array->data = malloc(rows * sizeof(int *));
for (int i = 0; i < rows; i++) {
array->data[i] = malloc(cols * sizeof(int));
for (int j = 0; j < cols; j++) {
array->data[i][j] = initialValue;
}
}
return array;
}
我还编写了一个应该释放结构的函数,但它似乎不起作用:
void freeArray2D(Array2D *array) {
int **data = array->data;
for (int i = 0; i < array->rows; i++) {
free(data[i]);
}
free(data);
free(array);
}
运行此测试代码时,我正在观察该脚本的内存使用情况,但 10 秒后它并没有减少:
int main(){
Array2D *testGrid = create2DArray(1300, 1300, 0);
sleep(20);
freeArray2D(testGrid);
sleep(5);
return 0;
}
如有任何帮助,我们将不胜感激,谢谢!
free
操作系统可能在一段时间内无法对已使用的内存位置进行操作。
你没有提到你是如何检查使用情况的。
但是,您也许可以使用以下命令检查 Linux 中的常驻内存。
grep "VmRSS\|VmHWM" /proc/`ps -u ${USER} | grep a.out | cut -d " " -f3`/status
GCC 11.4,在使用您的代码后,它确实显示出更少的内存。