gpt4 book ai didi

c - 指向指针不准确的指针

转载 作者:太空狗 更新时间:2023-10-29 16:06:45 25 4
gpt4 key购买 nike

我正在处理二维数组,并尝试将它从一个函数传递到另一个函数。我已经在这里看到了所有关于此的答案,但似乎没有一个能回答这种特殊类型的问题。这是我想要实现的一个简单的事情,但答案很奇怪。

这是主要的():

int main(void)
{
int i=0,j=0,n=0,n2=0;
double **a, **a1, b=0;

printf("Enter 'n2' :");
scanf("%d", &n2);


a= makearray(n2);
for(i=0; i < n2; i++){
for(j=0; j < n2; j++){
a[i][j] = j;
printf("%.f ",a[i][j]);
}
printf("\n");
}

printf("\n\n\n");

for(i=0; i < n2; i++){ // print a
for(j=0; j < n2; j++){
b = a[i][j];
printf("%.f ", b);
}
printf("\n");
}

printf("\n\n\n");
return 0;
}

函数 makearray() 只是返回一个指针,该指针指向作为参数传递的二维数组的指针。

makearray() 是:

double** makearray(int n2)
{
int i=0;
double** a;

a = malloc(n2 * sizeof(int *));
if(a == NULL){
fprintf(stderr, "out of memory\n");
exit(0);
}

for(i = 0; i < n2; i++){
a[i] = malloc(n2 * sizeof(int));
if(a[i] == NULL){
fprintf(stderr, "out of memory\n");
exit(0);
}
}

return a;

}

您可以输入'n2',其中(n2 x n2) 成为矩阵大小,n=9 时,输出为:

0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 0 1 2
0 1 2 3 4 5 0 1 2
0 1 2 3 4 5 0 1 2
0 1 2 3 4 5 0 1 2
0 1 2 3 4 5 0 1 2
0 1 2 3 4 5 0 1 2
0 1 2 3 4 5 0 1 2
0 1 2 3 4 5 0 1 2
0 1 2 3 4 5 6 7 8

我没有以任何方式修改第一个数组,只是再次打印它,知道为什么这两个数组不同吗?

最佳答案

在您的 makearray 中,malloc 使用 sizeof(int),但您正在为 double 创建一个数组。 Int 通常使用 4 个字节,但 double 使用 8 个字节。因此,您没有malloc-ing 足够的内存用于二维 double 组。

关于c - 指向指针不准确的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27672297/

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