История изменений
Исправление KennyMinigun, (текущая версия) :
slist_delete()
- if(l->size > 0) {
+ if(l->free_data && l->size > 0) {
slist_append()
+ if (! l) {
+ l = slist_new();
+ if (! l) return NULL;
+ }
snode* n = slist_node_new();
+ if (! l && !(l = slist_new())) return NULL;
snode* n = slist_node_new();
Вот так. Потому, что:
- не всегда требуется деструктор (например, данные могут быть внешними по отношению к контейнеру)
- список — это абстракция, главное — данные, что в нём хранятся. Поэтому добавление существующего элемента в несуществующий список можно считать созданием списка (аналогичное применимо и к удалению последнего элемента, но только если не нужно отличать ситуацию когда список пуст от ситуации, когда он не существует
И не заводи привычку именовать переменные/аргументы одной буквой!
Исходная версия KennyMinigun, :
slist_delete()
- if(l->size > 0) {
+ if(l->free_data && l->size > 0) {
slist_append()
+ if (! l) {
+ l = slist_new();
+ if (! l) return NULL;
+ }
snode* n = slist_node_new();
+ if (! l && !(l = slist_new())) return NULL;
snode* n = slist_node_new();
Вот так. Потому, что:
- не всегда требуется деструктор (например, данные могут быть внешними по отношению к контейнеру)
- список — это абстракция, главное — данные, что в нём хранятся. Поэтому добавление существующего элемента в несуществующий список можно считать созданием списка (аналогичное применимо и к удалению последнего элемента, но только если не нужно отличать ситуацию когда список пуст от ситуации, когда он не существует