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)
以这种方式思考 - 你应该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)
所以是的,你的第二个选择是正确的.