假设我们有:
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/