我写了一个方法来释放我的结构。现在我有一个问题。当我两次调用此方法时,它给了我一个错误。但是我确实检查了我的结构中是否有某些东西,所以我不知道它怎么可能给我错误。
我的结构:
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*/
}