gpt4 book ai didi

C编程动态初始化二维数组

转载 作者:太空宇宙 更新时间:2023-11-04 00:18:59 25 4
gpt4 key购买 nike

我在这里做了一些愚蠢的事情,我无法确切地指出是什么:

 void init_data(double **data, int dim_x, int dim_y) {

int i,j,k;

data = (double **) malloc(sizeof(double) * dim_x);
for (k = 0; k < dim_y; k++) {
data[k] = (double *) malloc(sizeof(double) * dim_y);
}

for (i = 0; i < dim_x; i++) {
for (j = 0; j < dim_y; j++) {
data[i][j] = ((double)rand()/(double)RAND_MAX);
}
}
}

在 main() 中,我执行以下操作:

double **dataA;
int dim = 10;
init_data(&dataA, dim, dim);

但是紧接着当我尝试打印数据时程序崩溃了:

int i,j;
for(i=0;i<dim;i++)
for(j=0;j<dim;j++)
printf("%d\n", dataA[i][j]);

我错过了什么?

谢谢

最佳答案

你在你的指针中犯了一些错误。您正在传递 &dataAinit_data , 所以参数类型应该是 ***double , 而不是 **double .也是你的第一个malloc正在初始化一个指针数组,而不是一个 double 组,所以它应该是 sizeof(double *) * dim_x .下面的代码应该可以工作。

void init_data(double ***data_ptr, int dim_x, int dim_y) {
int i,j,k;
double **data;
data = (double **) malloc(sizeof(double *) * dim_x);
for (k = 0; k < dim_x; k++) {
data[k] = (double *) malloc(sizeof(double) * dim_y);
}

for (i = 0; i < dim_x; i++) {
for (j = 0; j < dim_y; j++) {
data[i][j] = ((double)rand()/(double)RAND_MAX);
}
}
*data_ptr = data;
}

void main() {
double **dataA;
int dim = 10;
init_data(&dataA, dim, dim);
int i,j;
for(i=0;i<dim;i++)
for(j=0;j<dim;j++)
printf("%f\n", dataA[i][j]);
}

你的第一个循环也应该有条件 k < dim_x而不是 k < dim_y .在当前情况下这无关紧要,因为两个维度相同,但如果不相同会导致问题。最后,你应该使用 %f而不是 %d在你的printf ,因为 double 以不同于整数的格式存储,你可能会得到乱码而不是你想要的。

关于C编程动态初始化二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11463455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com