C 中的内存释放

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

我分配了一个二维指针数组。我需要使用数组符号(例如索引或偏移值)来释放此指针数组。

int main(int argc, char *argv[]) {
   int** A, B, C; // declare arrays.
   initNumSpace(); // allocate space of arrays.
   freeNumSpace(); // dealloc space of arrays.
}

// allocate space of arrays.
void initNumSpace() {
    A = malloc(sizeof(int*) * 10);
    B = malloc(sizeof(int*) * 10);
    C = malloc(sizeof(int*) * 10);

    int** a = A;
    int** b = B;
    int** c = C;

    for (int i = 0; i < 10; i++) {
       *a = malloc(sizeof(int) * 10);
       *b = malloc(sizeof(int) * 10);
       *c = malloc(sizeof(int) * 10);

       a++;
       b++;
       c++;
   }
}

分配内存空间后。我在程序中释放内存时遇到问题。释放代码看起来像

void freeNumSpace() {
   int** a = A;
   int** b = B;
   int** c = C;

   int* p = *a;
   int* q = *b;
   int* r = *c; 

   for (int i = 0; i < 10; i++) {
       p = *a;
       q = *b;
       r = *c;
           free(p);
           free(q);
           free(r);
       a++;
       b++;
       c++;
    }

    free(A);
    free(B);
    free(C);
}
c memory valgrind
1个回答
3
投票

节省时间。启用所有警告

B = malloc(sizeof(int*) * 10);

警告:从 'void *' 到 'int' 的赋值使指针变成整数,无需强制转换 [-Wint-conversion]

修复:

int** A, B, C;
-->
int **A, **B, **C;

分配给引用的对象,而不是类型

不易出错。更容易审查和维护。

// A = malloc(sizeof(int*) * 10);
A = malloc(sizeof *A * 10);
© www.soinside.com 2019 - 2024. All rights reserved.