我有這樣的功能:免費多維字符**用C不工作
char** init_matrix(int rows, int columns){
char **matrix = (char **)malloc (rows*sizeof(char *));
for(int i = 0; i < rows; i++){
matrix[i] = (char *) malloc (columns*sizeof(char));
for(int j = 0; j < columns; j++){
matrix[i][j] = '-';
}
}
return matrix;
}
void show_matrix(char **matrix, int rows, int columns){
printf("\n\n");
for(int i = 0; i < rows; i++) {
for(int j = 0; j < columns; j++)
printf("|%c|", matrix[i][j]);
printf("\n");
for(int j = 0; j < columns; j++)
printf("---");
printf("\n");
}
}
void setValueInMatrix(char** matrix, int row, int column, char value){
matrix[row][column] = value;
}
那麼我這樣做
char **matrix = init_matrix(rows, columns);
setValueInMatrix(matrix, solucion->row, solucion->column, solucion->aminoacido);
printf("matrix before free\n");
show_matrix(matrix, rows, columns);
for(int i = 0; i < rows; i++){
free(matrix[i]);
}
free(matrix);
printf("matrix after free\n");
show_matrix(matrix, rows, columns);
爲什麼輸出是相同之前和以後有空? :S
輸出:
matrix before free
|-||-||-||H||-||-||-|
---------------------
|-||-||-||P||-||-||-|
---------------------
|-||-||-||P||-||-||-|
---------------------
|-||-||-||H||-||-||-|
---------------------
|-||-||-||-||-||-||-|
---------------------
|-||-||-||-||-||-||-|
---------------------
|-||-||-||-||-||-||-|
---------------------
matrix after free
|-||-||-||H||-||-||-|
---------------------
|-||-||-||P||-||-||-|
---------------------
|-||-||-||P||-||-||-|
---------------------
|-||-||-||H||-||-||-|
---------------------
|-||-||-||-||-||-||-|
---------------------
|-||-||-||-||-||-||-|
---------------------
|-||-||-||-||-||-||-|
---------------------
我已閱讀所有這些職位,但它並不像它的工作原理:
您預期輸出了什麼? –
'show_matrix(matrix,rows,columns);'在你釋放其中檢查的內容後調用*未定義的行爲*。簡而言之,你從這一點*看到的是無關緊要的*,因爲你對最終行爲的期望已經被你自己的手所壓制。 – WhozCraig
'char **'是一個標量。它沒有維度(s)!如果你的意思是二維數組:'char **'不是二維數組,並且不能表示一個數組。 – Olaf