使用memcpy进行二维动态数组?

时间:2015-10-03 12:27:45

标签: c memcpy

我能够以良好的方式声明两个矩阵A和B.

但是,当使用memcpy(从A复制B)时,B给出了0的数组。

我该怎么办?我的代码是否正确使用memcpy?

    return (MainActivity) getActivity();
}

2 个答案:

答案 0 :(得分:3)

您在初始化MatrixA之前复制了内容。并且您还访问了索引超出范围(r+1评估11,其超出范围)导致 UB 。这样做 -

for(i=0;i<r;i++)            //  i starts from 0 
{
    for (j =0; j < c; j++)         // j from 0
  {
       MatrixA[i][j]=j;
       printf("A[%d][%d]= %d\t",i,j,MatrixA[i][j]);
  }
   printf("\n");
}

memcpy(MatrixB,MatrixA,c * sizeof(*MatrixA));   // copy after setting MatrixA

for(i=0;i<r;i++)              // similarly indexing starts with 0
{
    for (j =0; j < c; j++)
  {
    printf("B[%d][%d]= %d\t",i,j,MatrixB[i][j]);
  }
  printf("\n");
}

答案 1 :(得分:-2)

  

我的代码使用memcpy是否正确?

不,你的代码错了,但那不是memcpy问题。你只是错误地做C数组。

int r = 10, c = 10, i, j;

int (*MatrixA)[r];
MatrixA=malloc(c * sizeof(*MatrixA));

好的,MatrixA现在是指向10个元素的整数数组的指针吗?因此编译器保留内存为10个整数;但是,在malloc行中,用一个指向内存区域的指针覆盖它,该内存区域是单个整数的十倍。代码分析工具会告诉您已经构建了内存泄漏。

这些错误在整个代码中都会继续存在;你必须使用malloc来理解静态分配的C数组和动态分配之间的区别。