在C中释放多维数组

Sta*_*hta 3 c free memory-leaks memory-management multidimensional-array

假设我们有:

void createMultiArray(){
    int i,j;
    char*** codes = malloc(5 * sizeof(char**));
    for ( i = 0; i <= 4; i++ ) {
        codes[i] = malloc((i+1) * sizeof(char*));
        for ( j = 0; j <= i; j++ ) {
            codes[i][j] = malloc(2 * sizeof(char));
        }
   }
Run Code Online (Sandbox Code Playgroud)

我该如何免费codes

free(codes);
Run Code Online (Sandbox Code Playgroud)

要么

int i,j;
for(i = 0; i <=4; i++){
    for(j = 0; j <= i; j++){
        free(codes[i][j]);
    }
    free(codes[i]);
}
free(codes);
Run Code Online (Sandbox Code Playgroud)

Luc*_*ore 6

以这种方式思考 - 你应该free为每一个人malloc.

// you're allocating memory for codes
// must be freed with free(codes);
char*** codes = malloc(5 * sizeof(char**));

for ( i = 0; i <= 4; i++ ) {

    // allocating memory for every element in codes
    // must be freed with free(codes[i]);
    codes[i] = malloc((i+1) * sizeof(char*));

    for ( j = 0; j <= i; j++ ) {

        // allocating memory for every element in every element in codes
        // must be freed with free(codes[i][j])
        codes[i][j] = malloc(2 * sizeof(char));

    }
}
Run Code Online (Sandbox Code Playgroud)

所以是的,你的第二个选择是正确的.

  • 第一句话+1.以与分配相反的顺序释放也是一个好主意.特别是在这个多维问题中,如果你不这样做,你会破坏指针并泄漏. (2认同)