有人可能比我更聪明地向我解释为什么下面的代码段出错?通过引用分配内存没有问题,但只要我尝试通过引用分配任何内容或释放内存,就会发生段错误。二维动态数组的分配和传递参考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