2016-05-29 64 views
1

我正在为学校的纯C项目工作。c函数免费()为矩阵

char** init_matrix () 
{ 
    printf ("%s\n", __PRETTY_FUNCTION__); 
    char** temp_matrix; 
    temp_matrix = (char **) malloc (CHAR_BIT * sizeof (char*)); 
    for (int i = 0; i < CHAR_BIT; i ++) 
    { 
     *(temp_matrix + i) = (char *) calloc (CHAR_BIT, sizeof (char)); 
    } 

    return temp_matrix; 
} 

在主带我去一个电话,

char ** mat = init_matrix (); 

是免费级联到所有的指针指向

free(mat); 

或者我应该for循环每个指针做一次界定?

+0

你是什么意思的“纯”C(相比“不纯”C,也许)?我看到使用了不符合C语言标准的'malloc()'和'calloc()'。你不应该输出结果。 'free()'不会级联。如果你想编写自己的函数来释放你的矩阵,你应该使用'for'循环来释放每一个指定的指针。 – user3078414

+0

'free'函数不会'级联'代码必须将从任何内存分配函数调用返回的每个指针传递给'free()'。 – user3629249

回答

3

是免费级联到所有的指针指向

我应该为定义的每个指针循环做一遍?

是的。

的一般规则是:

1次来电,free()每1个来电,malloc()或它的朋友(calloc()realloc()strdup())。

如果在已经重新分配的内存块上调用realloc()不算。