我需要记住我用realloc()分配了多少内存。 帮我 if(!数组)
array=(Type*) calloc(1,sizeof(Type));
else
array=(Type*)realloc(array,(cont+1)*sizeof(Type));
array[cont].setName(....);
cont++;
它不起作用:第一次插入后,它说:访问冲突 我在类的构造函数中初始化了 cont = 0,并在析构函数中释放了内存。
最佳答案
查看添加到代码中的注释:
int count=0;
if(!array)
array=(Type*) calloc(count,sizeof(Type*); // Problem:
// missing )
// use sizeof(Type)
// calling calloc with count being zero
// so you do not allocate any memory
// use 1 instead of count
array[c].setName(EditName->Text);
c++;
count++;
array=(Type*)realloc(array,count*sizeof(Type*)); // Problem:
// use sizeof(Type)
所以它应该看起来:
int count=0;
if(!array)
array=(Type*) calloc(1,sizeof(Type));
array[c].setName(EditName->Text);
c++;
count++;
array=(Type*)realloc(array,count*sizeof(Type));
在运行此代码之前,变量c
必须初始化为零
同样,在运行此代码之前,array
必须为 nullptr
编辑
如果您打算多次运行此代码(我假设您这样做),那么似乎还有一个问题。
这一行:
array=(Type*)realloc(array,count*sizeof(Type));
^^^^^
Don't use count here as you always sets count to zero
该行应为:
array=(Type*)realloc(array,c*sizeof(Type));
总的来说,count
似乎没有真正的用途
关于C 重新分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37926184/