次のコードセグメントのフォルトがなぜ私に説明されていますか?参照によってメモリを割り当てるのに問題はありませんが、何かを割り当てようとするか、または参照で解放するとすぐに、segfaultが発生します。Cでの参照による2D動的配列の割り振りと引き渡し
ポインタについての基本的な考え方が不足していると確信しています。
#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を期待通りにタイプしていない可能性があります。また、C++と同じ方法でC内に参照がありません。 – Corbin
なぜ、 'freeMatrix'などのシグネチャが宣言と定義で違うのですか? – keety
ケビン、コービン:申し訳ありませんコピー貼り付け失敗、固定 – holocron