我正在尝试动态分配二维数组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");
}
答案 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");
}
}
此外,您应该在程序结束时释放所有已分配的内存。