这一直是一种痛苦。我正在尝试动态分配数组并使用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;
}
答案 0 :(得分:1)
我想您希望实际扩展capacity
中array
的{{1}}。
那么函数应该是:
ArrayList
我没有测试过这段代码,但我希望这会对你有所帮助。
答案 1 :(得分:0)
ArrayList具有固定大小:一个指针+两个整数。在指向ArrayList的指针上重新分配内存毫无意义。它是列表指针指向的内存,或者是要重新分配的数组指针指向的内存,或两者。 返回后的free()将永远不会运行,整个代码让我想知道你想要在更广泛的背景下实现什么。