主函数传指针给子函数,子函数中calloc,最后在主函数中free释放
当把子函数、主函数放在一个CPP文件中,free没有问题;
但把他们分开后,(我是把子函数做成动态链接库,在主函数中调用),一旦在主函数中free,就出现上述错误,求指点,谢谢!
求指点:C语言中使用free()释放calloc时显示Debug assertion failed
答案:2 mip版
解决时间 2021-02-25 21:35
- 提问者网友:夜落花台
- 2021-02-25 09:53
最佳答案
- 二级知识专家网友:縱马獨歸
- 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));
}
我复制你的代码时编译不了,有几个地方得修改,编译过了也没错,能运行,你查到了告诉我一下吧,谢谢了,
#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
怀疑出现了野指针,主函数传指针的值还是地址? 这个是关键。
就是子函数的指针有没有返回指针的指向地址回到主函数。
我要举报
如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
点此我要举报以上问答信息
推荐资讯