Сбой при печати размера Arraylist

У меня есть программа на C, которая реализует arrayylist (динамический массив, однако я не понимаю, как и почему я не могу напечатать размер массива. Когда я пытаюсь это сделать, программа просто вылетает. Вот программа.

Arraylist.c

#include "arraylist.h"

void arraylist_initial(struct arraylist *list) {
  list->size = 0;
  list->data = NULL;
}

int arraylist_get_size(const struct arraylist list) {
  return list.size;
}

value_type* arraylist_get_data_collection(const struct arraylist list) {
  return list.data;
}

void arraylist_set_data_collection(struct arraylist *list, value_type* data) {
  list->data = data;
}

void arraylist_add(struct arraylist *list, value_type value) {
  int size = arraylist_get_size(*list);
  value_type *new_data;

  new_data = realloc(list->data, (size + 1) * sizeof new_data[0]);

  if (new_data)
  {
      new_data[size] = value;
      arraylist_set_data_collection(list, new_data);
      ++list->size;
  }
}

value_type arraylist_get(const struct arraylist list, int index) {
  if(index < arraylist_get_size(list)) {
    return list.data[index];
  }
  else {
    return NULL;
  }
}

int arraylist_indexof(const struct arraylist list, value_type value) {
  int index = 0;
  for(; index != arraylist_get_size(list); ++index) {
    if(strcmp(list.data[index], value) == 0) {
      return index;
    }
  }

  return -1;
}

int main(void){
  struct arraylist list;

  arraylist_initial(&list);

  arraylist_add(&list, "1");
  arraylist_add(&list, "2");
  arraylist_add(&list, "3");
  arraylist_add(&list, "4");
  arraylist_add(&list, "5");
  arraylist_add(&list, "6");
  arraylist_add(&list, "7");
  arraylist_get_size(list);


  int index = 0;
  for(; index != 8; ++index) {
    printf("CHECK: %s\n", arraylist_get(list, index));

  }

  return 0;
}

Arraylist.h

#define _ARRAYLIST_H

#include <stdio.h>

typedef char* value_type;

struct arraylist {
  int size;
  value_type* data;
};

extern void arraylist_initial(struct arraylist *list);
extern int arraylist_get_size(const struct arraylist list);
extern value_type* arraylist_get_data_collection(const struct arraylist list);
extern void arraylist_set_data_collection(struct arraylist *list, value_type* data);
extern void arraylist_add(struct arraylist *list, value_type value);
extern value_type arraylist_get(const struct arraylist list, int index);
extern int arraylist_indexof(const struct arraylist list, value_type value);

В arraylist.c, если я это сделаю

printf(arraylist_get_size_list(list));

Он просто рушится, а я этого не понимаю?

Спасибо

# arrays list arraylist
Источник
Codelisting
за 0 против
Лучший ответ

Извините, я вспомнил время, когда вы не могли передавать структуры с помощью C. Похоже, теперь вы можете. Они продолжают что-то менять.

Вот настоящая проблема: printf принимает строку в качестве первого аргумента.

Вместо того:

printf(arraylist_get_size_list(list));

Пытаться:

printf("size: %d\n", arraylist_get_size_list(list));
  • 0
    спасибо за ваш ответ. Однако, если я попробую то, что вы сказали, я получаю ошибки: несовместимый тип для аргумента 1 "Arraylist_get_size" и конфликтующие типы для Arraylist_get_size
  • 0
    Смотрите мое обновление. Прохождение структур в ок. Я думаю, ваша ошибка заключалась в том, что вы передали в printf.
  • 0
    Спасибо. Работает. Однако для кода написано, что размер равен 7. Но разве не должно быть 6? так как он начинается с индекса 0, я думаю, он должен быть 0,1,2,3,4,5,6, почему размер 7?
Codelisting
Популярные категории
На заметку программисту