2016-11-21 2 views
-1

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

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)); 

Это просто сбой, и я не понял?

спасибо

ответ

0

К сожалению, я вспомнил время, когда вы не могли пройти с C. Структуры Похоже, теперь вы можете. Они продолжают меняться.

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

Вместо:

printf(arraylist_get_size_list(list)); 

Try:

printf("size: %d\n", arraylist_get_size_list(list)); 
+0

поблагодарить Вас за answer.However, если я попробовать то, что вы сказали, я получаю ошибки: несовместимый тип для аргумента 1 "arraylist_get_size" и конфликтующие типы для arraylist_get_size –

+0

См. мое обновление. Прохождение структур в порядке. Я думаю, ваша ошибка была в том, что вы передали printf. –

+0

Благодарю вас. Это работает. Однако для фактического кода его размер равен 7. Однако, разве это не должно быть 6? так как он начинается с индекса 0, я думаю, он должен быть 0,1,2,3,4,5,6, почему размер равен 7? –

Смежные вопросы