2016-11-21 16 views
-1

Ich habe ein C-Programm, das Arraylist (dynamische Array, aber ich verstehe nicht, wie oder warum ich nicht die Array-Größe drucken kann.Wenn ich es versuche, stürzt das Programm einfach ab.Hier das Programm.Drucken Arraylist Größe Absturz

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

In arraylist.c wenn ich

printf(arraylist_get_size_list(list)); 

Es stürzt einfach ab und ich verstehe es nicht?

danke

Antwort

0

Sorry, ich war eine Zeit lang zu erinnern, wenn Sie nicht structs mit C. passieren Es könnte man jetzt sieht aus wie möglich. Sie ändern sich ständig.

Hier ist das eigentliche Problem: printf nimmt eine Zeichenfolge als erstes Argument.

Statt:

printf(arraylist_get_size_list(list)); 

Versuchen:

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

danken Ihnen für Ihr answer.However, wenn ich versuche, was Sie gesagt haben, bekomme ich Fehler: inkompatible Typ für Argument 1 von "arraylist_get_size" und widersprüchliche Typen für arraylist_get_size –

+0

Siehe mein Update. Die Weitergabe von Strukturen in ok. Ich denke, dein Fehler war in dem, was du an printf weitergegeben hast. –

+0

danke.Es funktioniert.für den tatsächlichen Code, sagt es die Größe ist 7.Wie sollte es 6 sein? da es bei Index 0 beginnt, denke ich, sollte es 0,1,2,3,4,5,6 sein, warum die Größe 7 ist? –