構造体を解放するメソッドを作成しました。今、私は問題を抱えています。このメソッドを 2 回呼び出すと、エラーが発生します。しかし、構造体に何かがあるかどうかを確認するので、エラーが発生する可能性があるかどうかはわかりません。
私の構造体:
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*/
}