У меня вопрос:
Я объявлял две переменные типа double-to-pointer **matrix1
и **matrix2
и выделял их new
оператором, чтобы стать двумерными массивами. Сначала я использовал для цикла, чтобы matrix1
указывала на двойной тип данных, называемый element
, затем matrix1
в matrix2
, что означает, что 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);
}
Извините, я ноб....
Более эффективным, чем копирование отдельных элементов, является использование 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));
}
}