繁体   English   中英

函数需要一个双指针并在内部使用二维数组的表示

[英]Function requires a double pointer and uses a representation of 2D array inside

我正在尝试使用一个需要双指针 **B 作为输入的函数,并且在函数内部它使用指针的二维数组表示,无论我为指针分配多少内存,我都会不断收到segmentation fault error 这是一个可重现的示例。 谢谢。

#include <stdlib.h>
#include <stdio.h>

void Bk(float **B) {
    int n=2;
    for (int i = n-1; i >= 0; i--)
    {
        for (int j = n-1; j >= 0; j--){
            printf("i: %d, j: %d\n", i, j);
            printf("B: %f\n", B[i][j]);
        }
    }
}

void main() {
    int n=2;
    float *B;
    B = (float *) malloc((n*n)*sizeof(float));
    B[0]=0; B[1]=1; B[2]=2; B[3]=3;
    Bk(&B);
}

输出:

i: 2, j: 2
B: 55641428.000000
i: 2, j: 1
B: 26.942034
i: 1, j: 2
Segmentation fault (core dumped)

函数Bk期望参数B是一个指针数组,每个指针指向一个float数组。 但这不是你传递给它的。 您正在传递指向单个float数组的指针。

您需要在main重新定义Bfloat ** ,为指针数组分配空间,然后为每个子数组分配空间。

int n=2, i;
float **B;
B = malloc(n * sizeof(float*));
for (i=0;i<n;i++) {
    B[i] = malloc(n * sizeof(float));
}
B[0][0]=0; B[0][1]=1; B[1][0]=2; B[1][1]=3;
Bk(B);
for (i=0;i<n;i++) {
    free(B[i]);
}
free(B);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM