扩展动态分配的指针数组

时间:2014-02-03 00:28:54

标签: c arrays pointers dynamic expand

这一直是一种痛苦。我正在尝试动态分配数组并使用realloc,calloc和malloc,但三者都没有引导我做任何事情。好像我已成功扩展它,但我无法正确复制它。扩展功能中的所有内容都可以,但在我调用该函数后它变得无用。

typedef struct ArrayList
{
    // We will store an array of strings (i.e., an array of char arrays)
    char **array;

    // Size of list (i.e., number of elements that have been added to the array)
    int size;

    // Length of the array (i.e., the array's current maximum capacity)
    int capacity;

} ArrayList;

ArrayList *expandArrayList(ArrayList *list, int length){
    struct ArrayList *temp=realloc(list, length);
    if (length<list->capacity){
        return NULL;
        free(temp);
    }
    if (temp)
        list=temp;
    else{
        free(temp);
        return NULL;
    }
    list->capacity=length;
    printf("-> Expanded ArrayList to size %d.\n", length);
    return list;
}

2 个答案:

答案 0 :(得分:1)

我想您希望实际扩展capacityarray的{​​{1}}。 那么函数应该是:

ArrayList

我没有测试过这段代码,但我希望这会对你有所帮助。

答案 1 :(得分:0)

ArrayList具有固定大小:一个指针+两个整数。在指向ArrayList的指针上重新分配内存毫无意义。它是列表指针指向的内存,或者是要重新分配的数组指针指向的内存,或两者。 返回后的free()将永远不会运行,整个代码让我想知道你想要在更广泛的背景下实现什么。