내 구조체를 해제하는 방법을 작성했습니다. 이제 문제가 생겼어. 이 메서드를 두 번 호출하면 오류가 발생합니다. 하지만 구조체에 무언가가 있는지 확인하여 오류가 발생하는 이유를 모른다.C freeing check가 작동하지 않습니다.
내 구조체 :
typedef struct {
int num_rows;
int num_cols;
int** data;
} matrix;
내 무료 방법 :
void free_matrix(matrix* m){
int i;
for(i=0;i<m->num_rows;i++){
if(m->data[i]!=NULL){
free(m->data[i]);
}
}
if(m->data!=NULL){
free(m->data);
}
}
추가 방법 :
void fill_matrix_a(matrix* m){
m->data[0][0] = 1;
m->data[0][1] = 0;
m->data[0][2] = 2;
m->data[1][0] = 0;
m->data[1][1] = 3;
m->data[1][2] = 1;
}
void fill_matrix_b(matrix* m){
m->data[0][0] = 0;
m->data[0][1] = 3;
m->data[1][0] = 2;
m->data[1][1] = 1;
m->data[2][0] = 0;
m->data[2][1] = 4;
}
void init_matrix(matrix* m, int num_rows, int num_cols){
int i;
m->num_cols = num_cols;
m->num_rows = num_rows;
m->data = (int**) calloc(num_rows,sizeof(int*));
if(m->data==NULL){
printf("%s\n", "ERROR: probleem bij geheugenallocatie.");
exit(1);
}
for(i=0;i<num_rows;i++){
m->data[i] = (int*) calloc(num_cols,sizeof(int));
if(m->data[i]==NULL){ /* THE PROGRAM SAYS THIS IS TRUE BUT IT ISN'T BECAUSE I ALREADY FREED THE DATA OF B!! */
printf("%s\n", "ERROR: probleem bij geheugenallocatie.");
exit(1);
}
}
}
나에게 오류 제공에있어서
void ex_1_matrix_operations(){
matrix a,b,c;
/* init a(2,3) and fill with elements */
init_matrix(&a,2,3);
fill_matrix_a(&a);
print_matrix(&a);
/* init b (default) and fill with elements */
init_matrix_default(&b);
fill_matrix_b(&b);
print_matrix(&b);
free_matrix(&a);
free_matrix(&b);
/* create unity matrix */
init_identity_matrix(&a,2);
print_matrix(&a);
free_matrix(&a);
free_matrix(&b); /* THIS IS WHERE MY ERROR OCCURS*/
}
을
작동하지 않는 기능은 무엇입니까? 어떤 오류가 발생합니까? –
free()는 포인터를 NULL로 설정하지 않습니다. 직접 처리해야하지만, 그 점을 추측하면됩니다. –
'matrix_b'를 두 번 해제했습니다. –