изменение указателя realloc, когда он не работает

я начинаю домашнюю работу о динамическом массиве, во-первых, у меня есть двухмерный массив:

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;

Но я думаю, что это моя проблема, результат заставляет меня трудно понять, как это произошло:
введите описание изображения здесь

пожалуйста, помогите мне, спасибо всем

0

Решение

Когда вы делаете

ptr[size] = arr;

Вы по существу назначаете адрес arr, чтобы ptr[size], Это означает, что только что выделенная память потеряна и успешно утечка.

Вы хотите вручную скопировать элемент за элементом или использовать что-то вроде memcpy, Вероятно, это может решить вашу проблему, в зависимости от остальной части вашего кода.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]