打印浮点数然后打印数组时的奇怪行为

时间:2014-12-15 13:24:55

标签: c

我尝试使用XCode 6.1.1打印出具有以下功能的两个数组:

for (int j=0; j<4; j++) {
    for (int k=0; k<4; k++) {
        printf("%2d ", Lattice[0][j+N*k]);
    }
    printf("        ");
    for (int k=0; k<4; k++) {
        printf("%2d ", Lattice[1][j+N*k]);
    }
    printf("\n");
}
printf("\n");

调用函数时一切正常, 只要我以前不打印浮动。 打印int时,没有问题。所以它是一个 有点奇怪吧? 我正在这样初始化数组:

int **Lattice =  (int**)malloc(2*sizeof(int*));
if (Lattice == NULL) return NULL;

for (int i=0; i<2; i++){
    Lattice[i] =  (int *)malloc(2*sizeof(int));
    if (Lattice[i] == NULL) {
        for (int n=0; n<i; n++)
            free(Lattice[n]);
        free(Lattice);
        return NULL;
    }
    else{
        for (int j=0; j<N; j++) {
            for (int k=0; k<M; k++) {
                Lattice[i][j+N*k] = 0;
            }
        }
    }
}
return Lattice;

太糟糕了,我无法上传输出图片。

矩阵应该只显示零,但是浮点数 在某些条目中会有很多数字我无法解释。

我很感激任何提示。 谢谢。

1 个答案:

答案 0 :(得分:1)

所以你的代码有一些非常严重的问题。

Lattice[0]Lattice[1]需要维度4x4才能使您的代码打印块有意义。顺便说一下,这意味着NM也需要等于4,或者您需要将打印for循环条件分别更改为j < Nk < M

您的malloc也需要为此分配空间,因此:Lattice[i] = (int *)malloc(N * M * sizeof(int));

这会导致循环正常工作,但代码中的任何位置都没有浮点数。您无法使用printfint打印为float。该值不会被提升。它只会被视为float