2016-11-21 67 views
-1

我有一个C程序,实现arraylist(动态数组,但我不明白如何或为什么我不能打印数组大小。当我尝试这样做,程序只是crash.Heres程序。打印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)); 

尝试:

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

感谢您的answer.However,如果我尝试你说什么,我得到的错误:不兼容类型的 “arraylist_get_size” 的说法1和arraylist_get_size –

+0

的冲突类型请参阅我的更新。结构的通过没问题。我认为你的错误在于你传递给printf的东西。 –

+0

谢谢你。它的工作原理,但实际的代码,它说的大小是7.但是,不应该是6?因为它从索引0开始,我认为它应该是0,1,2,3,4,5,6,为什么大小是7? –