Я некоторое время использовал memcpy
с одномерными массивами, но когда я пытаюсь использовать двумерные, происходят странные вещи. Следующая программа иллюстрирует проблему:
using namespace std;
#include <iostream>
#include <string.h>
#include <complex>
int main() {
int n=4;
complex<double> **mat1=new complex<double>*[n], **mat2=new complex<double>*[n];
for(int i=0;i<n;i++) {mat1[i]=new complex<double>[n]; mat2[i]=new complex<double>[n];}
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) mat1[i][j]=complex<double>(i*j, i+j);
}
cout << endl << "Matrix 1:" << endl;
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) cout << mat1[i][j] << " ";
cout << endl;
}
cout << endl << "memcpy" << endl << endl;
memcpy(mat2, mat1, n*n*sizeof(complex<double>));
cout << "Matrix 1:" << endl;
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) cout << mat1[i][j] << " ";
cout << endl;
}
cout << endl << "Matrix 2:" << endl;
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) cout << mat2[i][j] << " ";
cout << endl;
}
}
Первая распечатка mat1
работает нормально, но во второй и mat2
первая половина элементов тарабарщина. Есть идеи, что происходит?
vector<vector<complex<double>>> mat1(Y, vector<complex<double>>(X));
для вашего 2d-массива. Чтобы скопироватьmat2 = mat1;
- person Neil Kirk   schedule 13.08.2014memcpy
или C-стиля. - person John Dibling   schedule 13.08.2014memcpy
будет правильно работать с этимиcomplex
структурами данных, поскольку они, скорее всего, не являются последовательными в памяти (т. е. они имеют переменные-члены, указывающие на разные области памяти). - person barak manos   schedule 13.08.2014