大众信息网

求指点:C语言中使用free()释放calloc时显示Debug assertion failed

答案:2  mip版
解决时间 2021-02-25 21:35
  • 提问者网友:夜落花台
  • 2021-02-25 09:53
主函数传指针给子函数,子函数中calloc,最后在主函数中free释放
当把子函数、主函数放在一个CPP文件中,free没有问题;
但把他们分开后,(我是把子函数做成动态链接库,在主函数中调用),一旦在主函数中free,就出现上述错误,求指点,谢谢!



最佳答案
  • 二级知识专家网友:縱马獨歸
  • 2021-02-25 10:44
这个是下标溢出的错误,但我检查了你的代码,也没问题,不知道怎么回事
我复制你的代码时编译不了,有几个地方得修改,编译过了也没错,能运行,你查到了告诉我一下吧,谢谢了,
#include 
#include 
#include 
#include 
#include 
#define PI 3.1415926
int halfsine_filter(int *n,float Tc,float **hn,int **len);
float p(float t,float Tc);
int *len=NULL;
float *hn=NULL;
void main()
{
 int n = 30; 
 int i;
 float Tc = 0.1;
 halfsine_filter(&n,Tc,&hn,&len);
 for (i = 0; i < (*len); i ++)
 {
  printf("hn[%d]=%.4f\n",i,hn[i]);
 }
 free(hn);
 hn=NULL;
 getchar();
}
int halfsine_filter(int *n,float Tc,float **hn,int **len)
{
 int i;
 float sum = 0;
 float *t = (float*)calloc(*n, sizeof(float));
 assert(t!=NULL);
 *hn = (float*)calloc(*n,sizeof(float));
 assert((*hn)!=NULL);
 t[0] = 0;
 for(i = 1; i < *n; i ++)
 {
  t[i] = t[i-1] + 2 * Tc / (*n-1);
 }
 for(i = 0; i < *n; i ++)
 {
  (*hn)[i]=p(t[i],Tc);
  sum += (*hn)[i];
 }
 //
 for( i = 0; i <*n; i ++)
 {
  (*hn)[i] /= sum;
 }
 *len=n;//数组的长度

 //释放内存
 free(t); 
 return 0;

}
float p(float t,float Tc)
{
 return (float)sin(PI*t/(2*Tc)); 
}
全部回答
  • 1楼网友:长街听风
  • 2021-02-25 11:31
怀疑出现了野指针,主函数传指针的值还是地址? 这个是关键。 就是子函数的指针有没有返回指针的指向地址回到主函数。
我要举报
如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
点此我要举报以上问答信息
推荐资讯