я начинаю домашнюю работу о динамическом массиве, во-первых, у меня есть двухмерный массив:
int initializeInfo[3][4] ={{77,68,0,0},{96,87,89,78},{70,90,86,0}};
и использовать указатель для его хранения:
int **ptr = (int**)malloc(3*sizeof(int));
int size = 0;
for(int i =0;i<3;i++){
addInitiazeInfo(ptr,initializeInfo[i],size);
}
вот функция addInitiazeInfo:
void addInitiazeInfo(int**& ptr, int arr[],int& size){
ptr[size] = (int*)malloc(4*sizeof(int));
if(ptr[size] == NULL){
return;
}
ptr[size] = arr;
size++;
}
Все в порядке! Двумерный массив хранится по указателю ptr.
И я хочу добавить новую строку, я думаю, что необходим realloc, затем я пытаюсь:
int arr[] = {3,4,5,6};
size++;
ptr = (int**)realloc(ptr,size * sizeof( int ) );
ptr[size-1] = (int*)malloc(4*sizeof(int));
ptr[size-1] = arr;
Но я думаю, что это моя проблема, результат заставляет меня трудно понять, как это произошло:
пожалуйста, помогите мне, спасибо всем
Когда вы делаете
ptr[size] = arr;
Вы по существу назначаете адрес arr
, чтобы ptr[size]
, Это означает, что только что выделенная память потеряна и успешно утечка.
Вы хотите вручную скопировать элемент за элементом или использовать что-то вроде memcpy
, Вероятно, это может решить вашу проблему, в зависимости от остальной части вашего кода.
Других решений пока нет …