我有一个复数的二维数组/矩阵。我想将此二维数组的一行复制到一维数组中。我在 x86_64-suse-linux 上使用复杂库和 gcc 版本 4.5.1。我使用 new 动态分配数组。使用 memcpy 我将 2D 矩阵的数组传输到 1D 数组。它工作得很好。问题是当我删除数组时它崩溃了。我不知道为什么或什么。当我使用 valgrind 进行调试(我不是这方面的专家)时,会收到以下消息。
==20516== Invalid free() / delete / delete[]
==20516== at 0x4C24F6E: operator delete[](void*) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==20516== by 0x400BBC: main (complex.cpp:29)
==20516== Address 0x590f290 is 0 bytes inside a block of size 160 free'd
==20516== at 0x4C24F6E: operator delete[](void*) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==20516== by 0x400B86: main (complex.cpp:27)
我在下面发布了整个代码。
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
#include<complex>
using namespace std;
int main(){
complex<double> **array = new complex<double>*[10];
for (int i=0; i<10; i++) array[i]=new complex<double>[10];
for (int i=0; i<10; i++){
for (int j=0; j<10; j++){
array[i][j]=complex<double> (i,j+1); abs(array[i][j]) << "]" << endl;
}
}
complex<double>* b = new complex<double>[10];
memcpy(&b,&array[2],sizeof(array));
for (int i=0; i<10; i++){
cout << array[2][i] << "\t" << b[i] << endl;
}
delete[] b;
for (int i = 0 ; i < 10 ; i++){
delete[] array[i];
}
delete[] array;
}
那么,有没有其他快速的方法可以将数组“array”复制到“b”以避免这个错误?当我只使用双精度数组而不是复杂数组时。没有观察到这个问题。另外,复杂数组的动态分配有问题吗?因为我似乎记得我过去在使用 new/delete 时遇到了一些与复杂数组的动态分配有关的问题。但我想我设法通过静态分配克服了它。我应该改变动态分配复杂数组的方式吗?