執行我的代碼時出現雙重空閒或損壞錯誤。實際上,我只是在C(任何RxC維度,這就是爲什麼使用指針)中創建一個矩陣,交換兩行,打印結果,然後試圖釋放內存。當我不交換行時,釋放完美。當我這樣做時,它會崩潰。我試圖改變交換的方式無濟於事。我認爲它與臨時指針交換超出範圍有關,但我不確定這是否是問題,以及如何修復它。交換矩陣行後出現雙重空閒()錯誤
MatElement只是一個雙。
typedef double MatElement;
主:
int main(int argc, char *argv[]) {
MatElement** matrix = matrixAlloc(3,3);
int i;
int j;
for(i = 0; i < 3; i++) {
for(j = 0; j < 3; j++) {
matrix[i][j] = i+j;
}
}
matrixPrint(matrix, "%5.1f", 3, 3);
swapRows(matrix, 0, 2);
matrixPrint(matrix, "%5.1f", 3, 3);
matrixFree(matrix);
return 0;
}
矩陣的分配方式:
MatElement **matrixAlloc(int nr, int nc) {
int i;
MatElement *ptr;
MatElement **A;
A = malloc(nr * sizeof(MatElement *)); /* array of ptrs */
ptr = calloc(nr * nc, sizeof(MatElement)); /* matrix elements */
for (i = 0; i < nr; i++) /* set row pointers properly */
A[i] = ptr + nc * i;
return A;
}
他們被釋放的方式:
void matrixFree(MatElement **A) {
free(A[0]);
free(A);
}
其行交換方式:
void swapRows(MatElement** G, int pivotRow, int rowExamined) {
MatElement* temp;
temp = G[rowExamined];
G[rowExamined] = G[pivotRow];
G[pivotRow] = temp;
}
有沒有人有任何想法會導致這個雙free()/ invalid free()?
是的,這固定它。謝謝。 – NSchrading