[英]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
重新定义B
为float **
,为指针数组分配空间,然后为每个子数组分配空间。
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.