【发布时间】:2015-12-31 13:43:48
【问题描述】:
我能够很好地声明两个矩阵 A 和 B。
但是,当使用 memcpy(从 A 复制 B)时,B 给了我 0 的数组。
我该怎么办?我的代码是否适合使用 memcpy?
int r = 10, c = 10, i, j;
int (*MatrixA)[r];
MatrixA=malloc(c * sizeof(*MatrixA));
int (*MatrixB)[r];
MatrixB=malloc(c * sizeof(*MatrixB));
memcpy(MatrixB,MatrixA,c * sizeof(MatrixA));
for(i=1;i<r+1;i++)
{
for (j = 1; j < c+1; j++)
{
MatrixA[i][j]=j;
printf("A[%d][%d]= %d\t",i,j,MatrixA[i][j]);
}
printf("\n");
}
printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");
for(i=1;i<r+1;i++)
{
for (j = 1; j < c+1; j++)
{
printf("B[%d][%d]= %d\t",i,j,MatrixB[i][j]);
}
printf("\n");
}
【问题讨论】:
-
好吧,你初始化
mallocated空间了吗? -
memcpy(MatrixB,MatrixA,c * sizeof(MatrixA));-->memcpy(MatrixB,MatrixA,c * sizeof(*MatrixA));并移至设置为MatrixA的值之后。索引也超出范围。因为 0 原点。 -
我认为这不是 malloc 的事实,因为 A 矩阵的声明很好,输出也很好。
-
是的,但是您在将
MatrixA的(未定义的)内容复制到MatrixB后对其进行了初始化。此外,索引从0开始。