Добавить в конец массива - PullRequest
0 голосов
/ 03 января 2019

Моя цель - добавить список в конец массива.Когда я пытаюсь выполнить, это вызывает ошибку сегментации.

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

array[i] = tmp[i];

Это мой код:

int i;
List *tmp = array;

array = (List *)malloc((dim+1) * sizeof(List));

for (i = 0; i < dim; i++) {
    array[i] = tmp[i];
}

dim++;

array[dim-1] = (List)malloc(sizeof(struct TList));
memcpy(array[dim-1], set, sizeof(struct TList));

return array;

Где«dim» - это глобальная переменная, которую я использую для отслеживания размера массива

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

Спасибо за помощь

1 Ответ

0 голосов
/ 03 января 2019

Первое замечание:

int i;
List *tmp = array;

array = (List*)malloc((dim+1) * sizeof(List));

for (i = 0;i < dim;i++){

  array[i] = tmp[i];

}

Может быть просто так:

array = realloc(array, (dim+1) * sizeof(List));

in array[dim-1] = (List)malloc(sizeof(struct TList));, почему тип в приведении не является также типом в sizeof ?

Но настоящий вопрос в том, что вы ожидаете от выполнения этого задания, кроме как потерять память из-за утечки памяти?

Эта строка должна быть удалена.


Каковы определения TList и списка и типа set ?


Линия

memcpy(array[dim-1], set, sizeof(struct TList));

неверно и должно быть ( установлено должно быть списком)

array[dim-1] = set;

потому что массив - это вектор Список , а не вектор Список *

...