在C中动态分配二维(双)数组

时间:2017-04-17 17:23:32

标签: c arrays multidimensional-array

我正在尝试动态分配二维数组N + 1xN,所有元素都加倍。然后我想为数组的每个元素添加值(1.6)。最后一步是打印这个数组。 我的功能

void inic(double **t)
{
    for(int y=0;y<N;y++)
    {
        for(int x=0;x<N+1;x++)
        {
            t[x][y]=1.5;
        }
    }
}

不能正常工作,我不知道为什么。

例如(对于n = 3)结果是:

[0][0][0][0] 
[0][0][0][0] 
[0][0][0][0] 

我期待:

[1.6][1.6][1.6][1.6] 
[1.6][1.6][1.6][1.6] 
[1.6][1.6][1.6][1.6] 
[1.6][1.6][1.6][1.6] 

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
int N;

void inic(double **t)
{
    for(int y=0;y<N;y++)
    {
        for(int x=0;x<N+1;x++)
        {

            t[x][y]=1.5;

        }
    }
}

void print(double **t)
{
    for(int y=0;y<N;y++)
    {
        for(int x=0;x<N+1;x++)
        {
            printf("%i ",t[x][y]);
        }
        printf("\n");
    }
}




int main()
{
    double **t;
    N=3;
    t=malloc((N+1)*sizeof(double*));
    for(int i=0;i<N+1;i++)
    {
        t[i]=malloc(N*sizeof(double));
    }

    inic(t);
    print(t);
    printf("\n");
}

2 个答案:

答案 0 :(得分:1)

尝试将t[x][y]替换为t[y][x]

答案 1 :(得分:1)

您使用的转换说明符不正确。请尝试以下

printf("%lf ",t[x][y]);

使用其他索引的顺序也是更自然的 这句话

t=malloc((N)*sizeof(double*));

分配N&#34;行&#34;然后是N + 1&#34;列&#34;在循环中分配

for(int i=0;i<N;i++)
{
    t[i]=malloc( ( N + 1 )*sizeof(double));
}

在这种情况下,其他功能看起来像

void inic(double **t)
{
    for(int x = 0; x < N; x++)
    {
        for( int y = 0;  y < N + 1; y++ )
        {

            t[x][y]=1.5;

        }
    }
}

void print(double **t)
{
    for( int x = 0; x < N; x++ )
    {
        for( int y = 0; y < N + 1; y++)
        {
            printf("%lf ",t[x][y]);
        }
        printf("\n");
    }
}

此外,您应该在程序结束时释放所有已分配的内存。