有人可能比我更聰明地向我解釋爲什麼下面的代碼段出錯?通過引用分配內存沒有問題,但只要我嘗試通過引用分配任何內容或釋放內存,就會發生段錯誤。二維動態數組的分配和傳遞參考C
我敢肯定,我錯過了一些關於指針和通過引用傳遞的基本概念,希望能夠拋棄一些光。
#include <stdlib.h>
#include <stdio.h>
void allocateMatrix(float ***);
void fillMatrix(float ***);
void freeMatrix(float **);
int main() {
float **matrix;
allocateMatrix(&matrix); // this function calls and returns OK
fillMatrix(&matrix); // this function will segfault
freeMatrix(matrix); // this function will segfault
exit(0);
}
void allocateMatrix(float ***m) {
int i;
m = malloc(2*sizeof(float*));
for (i = 0; i < 2; i++) {
m[i] = malloc(2*sizeof(float));
}
return;
}
void fillMatrix(float ***m) {
int i,j;
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++) {
(*m)[i][j] = 1.0; // SEGFAULT
}
}
return;
}
void freeMatrix(float **m) {
int i;
for (i = 0; i < 2; i++) {
free(m[i]); // SEGFAULT
}
free(m);
return;
}
我其實有點驚訝,編譯。 「void allocateMatrix(&m)」可能不會像預期的那樣將m輸入爲float **。另外,C中的引用與C++中的引用不同。 – Corbin 2012-04-07 04:08:25
爲什麼'freeMatrix'等簽名在聲明和定義時有所不同? – keety 2012-04-07 04:14:47
keety,科爾賓:對不起復制粘貼失敗,修復它 – holocron 2012-04-07 04:37:43