После этого вопроса я пытаюсь изменить код, указанный в этой записи блога , чтобы создать функцию append
с использованием динамического распределения памяти. Это то, что я до сих пор:
#include <stdio.h>
#include <stdlib.h>
typedef struct intlist_ {
int size;
int* list;
} intlist;
void append(intlist* arr, int value){
realloc((*arr).list, sizeof((*arr).list) + sizeof(int));
(*arr).size = (*arr).size + 1;
(*arr).list[(*arr).size -1] = value;
}
int main() {
intlist arr;
arr.size = 4;
arr.list = malloc(arr.size * sizeof(int));
arr.list[0] = 0;
arr.list[1] = 5;
arr.list[2] = 3;
arr.list[3] = 64;
append(&arr, 12);
for (int ii = 0; ii < arr.size; ii++)
printf("%d, ", arr.list[ii]);
free(arr.list);
return 0;
}
Однако полученный результат неверен:
clang версия 7.0.0-3 ~ ubuntu0.18.04.1 (tags / RELEASE_700 / final)
main.c: 10: 3: предупреждение: игнорирование возвращаемого значения функции, объявленной с
Атрибут «warn_unused_result» [-Wunused-result]
realloc ((* arr) .list, sizeof ((* arr) .list) + sizeof (int));
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~
1 предупреждение сгенерировано.
0, 5, 3, 64, 0, 5, 3, 64, 12,
Я использую этот онлайн-компилятор для тестирования, где вы также можете увидеть последние версии приведенного выше кода. Буду признателен, если вы поможете мне узнать, где моя ошибка и как я могу ее исправить. Заранее спасибо за вашу поддержку.
P.S. Вы можете получить окончательную версию кода здесь, в this Gist .