假设我有一个名为Thing的结构。如果我想要一个“Thing”数组,但它没有固定大小(动态),我该如何为它分配空间?我最初是为数组本身malloc空间,然后每次向其添加元素时都必须重新分配空间吗? 例如:
struct Thing{
char *stuff;
char **morestuff;
int evenmorestuff;
};
Thing *thingarray;
thingarray = malloc(sizeof(Thing));
....
//And then allocating space for elements, which will get called an unknown amount of times
Thing j;
thingarray[count] = j;
如何设置malloc和realloc以便能够将类似Thing的元素添加到“Thing”数组中?
答案 0 :(得分:3)
您可能希望使用dynamic array策略:跟踪其中的项目数量和当前容量,然后在填满时将容量加倍。您可以获得摊销线性时间和数组的随机访问权。
答案 1 :(得分:0)
你可以从NULL指针(Thing * thingarray = NULL;)开始,因为数组中没有任何内容。
在添加项目时,您需要为每个项目分配内存。使用malloc作为第一个项目,并使用realloc作为其他项目。
答案 2 :(得分:0)
你需要将它用于一定数量的“东西”
说:malloc(sizeof(thing)* 8)为其中的八个获得空间。
如果需要更多空间,则必须使用临时变量重新分配空间。
答案 3 :(得分:-1)
如果可以,请尝试将矢量用于动态数组。它会为您节省大量时间,而且您不必担心分配:
#include <vector>
using namespace std;
struct Thing
{
char *stuff;
char **morestuff;
int evenmorestuff;
};
int _tmain(int argc, _TCHAR* argv[])
{
vector<Thing> vt;
char stuff = 'a';
char *morestuff = "abc";
Thing t;
t.stuff = &stuff;
t.morestuff = &morestuff;
t.evenmorestuff = 0;
int count = 10;
for (int i = 0; i <= count; ++i)
{
t.evenmorestuff = i;
vt.push_back(t);
}
Thing j;
j.stuff = &stuff;
j.morestuff = &morestuff;
j.evenmorestuff = 0;
vt[count] = j;
return 0;
}