gpt4 book ai didi

c - 使用免费时下一个尺寸无效

转载 作者:行者123 更新时间:2023-11-30 20:41:20 26 4
gpt4 key购买 nike

或者,重复 Facing an error — glibc detected free invalid next size (fast) .

我有一个名为 bond 的结构,其定义如下:

typedef struct{
int type1;
int type2;
int id_1;
int id_2;
float dist;
} bond;

我在嵌套循环中分配这些结构的数组并定期释放它。但是,由于某种原因,我收到 free() Invalid Next size 错误。代码如下:

while(i<(C.num_type_A+C.num_type_B)){//1a
bond_arr=(bond*)malloc(100*sizeof(bond));

a=-N1;
while(a<=N1){//2a

b=-N2;
while(b<=N2){//3a

c=-N3;
while(c<=N3){//4a

j=0;
while(j<(C.num_type_A+C.num_type_B)){//5a

//if the same atom do nothing
if((i==j)&&(a==0)&&(b==0)&&(c==0)){//6a
j=j+1;
}//6b
else{//7a

//calculate bond length
bondlength=calc_dist(a,b,c,i,j,C);

if(bondlength<=cutoff){//8a
//store bond
temp_bond.type1=((i+1)<=C.num_type_A);
temp_bond.type2=((j+1)<=C.num_type_B);
temp_bond.id_1=i;
temp_bond.id_2=j;
temp_bond.dist=bondlength;
bond_arr[n]=temp_bond;
n=n+1;

//if out of memory allocate twice as much
if(n==(nmax-1)){//9a
printf("begin\n");
temp_ptr=realloc(bond_arr,sizeof(bond)*2*nmax);
printf("end\n");

if(temp_ptr==NULL){
printf("Memory allocation failed\n");
}
else{
bond_arr=temp_ptr;
}
nmax=2*nmax;
}//9b
}//8b
}//7b
j=j+1;
}//5b
c=c+1;
}//4b
b=b+1;
}//3b
a=a+1;
}//2b

//sort bonds and update LI index
sort_bonds(bond_arr,n);
f=update_LI(bond_arr,LIcurr,n);
LIcurr=f;
printf("%d\n",n);
free(bond_arr);
n=0;
i=i+1;
}//1b

最佳答案

看起来可能是 realloc 逻辑造成的。初始分配大小为 100。然后,当 n 达到 nmax-1 时,它会增长。 nmax 的初始值未显示(我看到)。即使它从 100 开始,它也不会在循环顶部重置。因此,如果 n 增长超过 100 并导致重新分配,则 nmax 会加倍,并且不再与原始大小 100 匹配。

关于c - 使用免费时下一个尺寸无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15648152/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com