小编hol*_*ron的帖子

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++) …
Run Code Online (Sandbox Code Playgroud)

c pass-by-reference segmentation-fault multidimensional-array dynamic-memory-allocation

5
推荐指数
1
解决办法
3010
查看次数