似乎在realocVet函数第二次运行后,出现错误信息“malloc: *** error for object 0x7f8bfac039b0: pointer being realloc'd was not allocated”。
void realocVet (float *precoList, char *nomeList, short int *quantidadeList)
{
static short int p=2,n=100,q=2;
p=4*p;
n=4*n;
q=4*q;
precoList =realloc(precoList,p * sizeof(float));
nomeList =realloc(nomeList,n * sizeof(char));
quantidadeList =realloc(quantidadeList,q * sizeof(short int ));
}
void insertData (float *precoList, char *nomeList, short int *quantidadeList, struct newCard myCard)
{
static short int slotsAvailable = 2, aux=2,currentCard=0,nnchar=0;
short int nchar;
precoList[currentCard] = myCard.preco;
quantidadeList[currentCard] = myCard.quantidade;
for (nchar=0;nchar<50;nchar++)
{
nomeList[nnchar] = myCard.nome[nchar];
nnchar++;
}
currentCard++;
slotsAvailable--;
if (slotsAvailable==0)
{
realocVet(precoList, nomeList, quantidadeList);
slotsAvailable = aux;
aux = 2*aux;
}
}
最佳答案
您传入一个指针 float *precoList,然后重新分配(可能会更改)。问题是当你返回时,调用者仍然拥有指针的旧值。
当您再次调用该函数时,它将使用指向已释放内存的旧值进行调用。
void realocVet (float **precoList, char **nomeList, short int **quantidadeList)
{
static short int p=2,n=100,q=2;
p=4*p;
n=4*n;
q=4*q;
*precoList =realloc(*precoList,p * sizeof(float));
*nomeList =realloc(*nomeList,n * sizeof(char));
*quantidadeList =realloc(*quantidadeList,q * sizeof(short int ));
}
关于c - 第二次运行后带有 realloc 的函数使程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16345147/