Memcpy矩阵到另一个矩阵

问题描述 投票:-3回答:2

我想复制2个矩阵。对于循环(行和列),通过逐个元素地复制到2,对于循环(行和列),经过几次数学运算并复制后,最终结果是正确的,而使用“ memcpy”时,最终结果在小数点后是错误的。代码如下。

double **L_original;
double **L;
int nF,nU;



 L = new double*[nU]();
 L_original = new double*[nU]();
  for(int i=0; i<nU; i++){
      L_original[i] = new double[nF]();
      L[i] = new double[nF]();
  }

// copy element to element
/*for(int i=0; i<nU; i++)
        for(int j=0; j<nF; j++)
            L[i][j] = L_original[i][j];*/

memcpy(L, L_original, sizeof(L_original));

这是正确的结果:Matrix Correct这是输出:output when using memcpy

c++ matrix memcpy
2个回答
1
投票

您的LL_original是2D矩阵,由指向分别分配的1D向量的指针数组组成。这些内存地址可能不在连续的内存空间中。因此,您不能使用单个memcpy复制所有子向量。

您将必须使用for循环在每个L [i]和L_original [i]之间应用memcpy

此外,您的sizeof()运算符使用不正确。您需要复制的是数据的字节长度(一维子向量的字节长度),而不是指针的长度。您需要类似的东西

  for(int i=0; i<nU; i++)
     memcpy(L[i],L_original[i], sizeof(double)*nF);
© www.soinside.com 2019 - 2024. All rights reserved.