c - 在 C 中释放多维数组

标签 c memory-management memory-leaks multidimensional-array free

假设我们有:

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));
        }
   }

我应该如何释放代码

free(codes);

int i,j;
for(i = 0; i <=4; i++){
    for(j = 0; j <= i; j++){
        free(codes[i][j]);
    }
    free(codes[i]);
}
free(codes);

最佳答案

这样想 - 每个 malloc 都应该有一个 free

// 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));

    }
}

是的,您的第二个选项是正确的。

关于c - 在 C 中释放多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8604396/

相关文章:

c++ - 一劳永逸地理解 C 和 C++ 中 f() 和 f(void) 之间的区别

c - 我如何修改我的函数以仅创建一个新线程而不是两个,并且仍然获得相同的排序结果?

swift - 当不在闭包中时,传递属于 self 的函数是否会导致保留循环?

c++ - 编译器是否优化对常量变量的引用?

c - 为什么这部分会出现段错误?

c# - Exception 的 MethodHandle 什么时候改变?

android - Android什么时候认为窗口泄漏了?

c++ - 将指针移动到其他位置后删除分配的内存

c++ - 使用临时数据表修复内存泄漏(堆与堆栈)

C - pow 函数意外行为