2014-02-05 123 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)); 
    } 
}