2014-02-05 99 views
0

我有个问题如下:复制动态分配的2D阵列

我声明了两个指针到指针双型变量**matrix1**matrix2和由操作者new分配他们成为2D阵列。 首先我用for循环使matrix1指向称为element的双类数据,然后我复制matrix1matrix2,这意味着matrix2也指向element。然后问题出现了:我使用delete运营商复制后终止matrix1,但是然后值matrix2指向变得非常奇怪。我认为这是因为在删除matrix1之后,element终止,所以我认为其中一个解决办法是让matrix2指向其他地址,其值与元素相同。但我不知道如何做到这一点(删除matrix1后复制元素到新的动态记忆并不会消失),有人可以帮助我吗?谢谢。

void MatCpy(double **InMat, double **OutMat, int NumOfRow, int NumOfCol) 
{ 
    for (int j = 0; j < NumOfRow; j++) 
    { 
     for (int i = 0; i < NumOfCol; i++) 
     { 
      OutMat[j][i] = InMat[j][i]; 
     } 
    } 
} 

double **Malloc2D_Dbl(int row, int col) 
{ 
    double **data = new double*[row]; 

    for (int i = 0; i < row; i++) 
     data[i] = new double[col]; 

    return data;  
} 

void load(char *load_path, double **data, int height, int width) // function for loading 
{ 
    int i = 0, j = 0; 
    char buffer[30]; 
    file_handle = fopen (load_path, "r"); 
    for (int k = 0; k < width*height; k++) 
    { 
     fscanf (file_handle, "%s", &buffer); 
     j = k/width; 
     i = k % width;     
     data[j][i] = atof(buffer); 
    } 
    fclose (file_handle); 
} 

对不起我是一个小白....

+1

您可以添加代码呢? – vathsa

+0

添加代码将是有用的。但是,现在我可以想象在浅拷贝中的这件事。即只复制指向数据的指针,而不是数据本身。 – alexolut

+0

对不起,我忘了打印我的代码 – user3275148

回答

0

不是复制单个元素更有效的方法是使用memcpy这样的:

void MatCpy(double **InMat, double **OutMat, int NumOfRow, int NumOfCol) { 
    for(int j=0; j<NumOfRow; j++) { 
     memcpy(OutMat[j], InMat[j], NumOfCol*sizeof(double)); 
    } 
}