仅仅因为内存已经免费并不意味着你无法访问它!当然,在它被免费后访问它是一个非常糟糕的主意,但这就是为什么它在你的例子中起作用的原因.
请注意,free( *first_matrix )
只有free first_matrix[0]
,而不是其他数组.你可能想要某种标记来表示最后一个数组(除非你总是知道你何时释放外部数组你分配了多少个内部数组).就像是:
int** read_matrix(int size_x, int size_y) { int** matrix; matrix = calloc(size_x, 1+sizeof(int*)); // alloc one extra ptr for(int i = 0;i那么当你解放它们时:
// keep looping until you find the NULL one for( int i=0; first_matrix[i] != NULL; i++ ) { free( first_matrix[i] ); } free( first_matrix );