c - 如何在函数中分配双指针的内存?

标签 c function pointers malloc double-pointer

我正在尝试为 main 函数中声明的双指针分配内存:

int main () {

    float **a, **b, **c;

    inicializarMatriz (&a, &b, &c);
}

inicializarMatriz 函数中应该 malloc 矩阵(双指针)。

void inicializarMatriz(float ***a, float ***b, float ***c) {
    // Reservar espacio de memoria para la matriz a
    **a = (float **) malloc ( N * sizeof(float *) );
    for (int i = 0; i < N; ++i) {
        a[i] = (float *) malloc ( N * sizeof(float) );
    }
    if ( a == NULL ) {
        fprintf(stderr, "No se ha podido asignar memoria a la matriz a");
    }

    // Reservar espacio de memoria para la matriz b
    **b = (float **) malloc ( N * sizeof(float *) );
    for (int i = 0; i < N; ++i) {
        b[i] = (float *) malloc ( N * sizeof(float) );
    }
    if ( b == NULL ) {
        fprintf(stderr, "No se ha podido asignar memoria a la matriz b");
    }

    // Reservar espacio de memoria para la matriz c
    **c = (float **) malloc ( N * sizeof(float *) );
    for (int i = 0; i < N; ++i) {
        c[i] = (float *) malloc ( N * sizeof(float) );
    }
    if ( c == NULL ) {
        fprintf(stderr, "No se ha podido asignar memoria a la matriz c");
    }
}

我收到此警告:[Warning] assignment from incompatible pointer type 并且程序崩溃。知道哪里出了问题吗?

最佳答案

正如@SomeProgrammerDude 所建议的,接下来是工作代码:

int main () {

    float **a, **b, **c;

    inicializarMatriz (&a, &b, &c);
}

void inicializarMatriz(float ***a1, float ***b1, float ***c1) {
    // Reservar espacio de memoria para la matriz a
    *a1 = (float **) malloc ( N * sizeof(float *) ); // *a1 = **a
    for (int i = 0; i < N; ++i) {
        (*a1)[i] = (float *) malloc ( N * sizeof(float) ); // (*a1)[i] = a[i]
    }
    if ( a == NULL ) {
        fprintf(stderr, "No se ha podido asignar memoria a la matriz a");
    }

    // Reservar espacio de memoria para la matriz b
    *b1 = (float **) malloc ( N * sizeof(float *) ); // *b1 = **b
    for (int i = 0; i < N; ++i) {
        (*b1)[i] = (float *) malloc ( N * sizeof(float) ); // (*b1)[i] = b[i]
    }
    if ( b == NULL ) {
        fprintf(stderr, "No se ha podido asignar memoria a la matriz b");
    }

    // Reservar espacio de memoria para la matriz c
    *c1 = (float **) malloc ( N * sizeof(float *) ); // *c1 = **c
    for (int i = 0; i < N; ++i) {
        (*c1)[i] = (float *) malloc ( N * sizeof(float) ); // (*c1)[i] = c[i]
    }
    if ( c == NULL ) {
        fprintf(stderr, "No se ha podido asignar memoria a la matriz c");
    }
}

问题的解决方案在末尾的同一行中。

关于c - 如何在函数中分配双指针的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52642329/

相关文章:

c - 如何构建共享库但在 Linux 上使用静态 glibc?

c++ - 使用 c++ 为大至 1000 x 1000 的矩阵实现 8-连通性的连通分量标记

function - Core Haskell 将类型应用于函数意味着什么?

javascript - 使用 jQuery 的 $(this) 会在函数内引发错误

pointers - 为什么通过原始指针修改可变引用的值不会违反 Rust 的别名规则?

C++:将类实例存储在分配的内存中

c - Linux/C : Process with a child both hangs after adding waitpid

c - int (*f[])(int*) 代表什么?

python - 素数递归 - 它是如何工作的? (Python)

c - 为什么编译器将变量理解为指针,而事实并非如此?