带有二维数组的自由结构

问题描述 投票:0回答:1

我对 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;
}

如有任何帮助,我们将不胜感激,谢谢!

c memory malloc
1个回答
0
投票

free
操作系统可能在一段时间内无法对已使用的内存位置进行操作。

你没有提到你是如何检查使用情况的。

但是,您也许可以使用以下命令检查 Linux 中的常驻内存。

grep "VmRSS\|VmHWM" /proc/`ps -u ${USER} | grep a.out | cut -d " " -f3`/status

GCC 11.4,在使用您的代码后,它确实显示出更少的内存。

    

© www.soinside.com 2019 - 2024. All rights reserved.