程序中有这么一个子函数:
espl2(...)
{
...
double *s;
s=new double[n];
....
delete[] s;
}
程序中要循环调用,在循环到其中一步的时候就在delete[] s;处发生内存错误:DAMAGE After Normal block ...编译器提示在此行内存泄漏,同时别的很多new的地方也提示内存泄漏。减少循环次数就全不泄漏了。本文vc处于菜鸟水平,恳求各位帮忙啊!
espl2(...)
{
...
double *s;
s=new double[n];
....
delete[] s;
}
程序中要循环调用,在循环到其中一步的时候就在delete[] s;处发生内存错误:DAMAGE After Normal block ...编译器提示在此行内存泄漏,同时别的很多new的地方也提示内存泄漏。减少循环次数就全不泄漏了。本文vc处于菜鸟水平,恳求各位帮忙啊!
解决方案 »
- udp 非阻塞模式 这样接收数据为什么接收不到
- 怎样把一个模块转换成activex控件?(只剩80了)
- 请问如何在dll的export函数里创建一个非模式对话框
- 纸张8k的宽多少 高多少?
- 如何设置编译类型(及RELEASE和DEBUG外的编译类型)
- ==== 一个很奇怪的问题====
- NT系统中如何判断给定的“用户名/密码”是否为合法的帐号信息?
- 不知大家有没有遇到过这种情况(关于VC编辑器)
- 如何实现flash在窗口上透明背景播放?
- VC使用怪问题?(ActiveX控件建立的注册问题)
- 大哥们,推荐几本关于图形处理(尤其是图形分割)方面的书,不过基础点的,以前没接触过这方面的
- 付费求帮助,熟悉ActiveX的朋友请进
万分感谢各位,等问题解决我再把我所有的分分给大家!
double Clunguijiechu::espl2(double *x,double *y,int n,double *dy,double *ddy,\
double *t,int m,double *z,double *dz,double *ddz)
{
int i,j;
double h0,h1,alpha,beta,g,*s;
s=new double[n];
dy[0]=-0.5;
h0=x[1]-x[0];
s[0]=3.0*(y[1]-y[0])/(2.0*h0)-ddy[0]*h0/4.0;
for (j=1;j<=n-2;j++)
{ h1=x[j+1]-x[j];
alpha=h0/(h0+h1);
beta=(1.0-alpha)*(y[j]-y[j-1])/h0;
beta=3.0*(beta+alpha*(y[j+1]-y[j])/h1);
dy[j]=-alpha/(2.0+(1.0-alpha)*dy[j-1]);
s[j]=(beta-(1.0-alpha)*s[j-1]);
s[j]=s[j]/(2.0+(1.0-alpha)*dy[j-1]);
h0=h1;
}
dy[n-1]=(3.0*(y[n-1]-y[n-2])/h1+ddy[n-1]*h1/
2.0-s[n-2])/(2.0+dy[n-2]);
for (j=n-2;j>=0;j--)
dy[j]=dy[j]*dy[j+1]+s[j];
for (j=0;j<=n-2;j++) s[j]=x[j+1]-x[j];
for (j=0;j<=n-2;j++)
{ h1=s[j]*s[j];
ddy[j]=6.0*(y[j+1]-y[j])/h1-2.0*(2.0*dy[j]+dy[j+1])/s[j];
}
h1=s[n-2]*s[n-2];
ddy[n-1]=6.*(y[n-2]-y[n-1])/h1+2.*(2.*dy[n-1]+dy[n-2])/s[n-2];
g=0.0;
for (i=0;i<=n-2;i++)
{ h1=0.5*s[i]*(y[i]+y[i+1]);
h1=h1-s[i]*s[i]*s[i]*(ddy[i]+ddy[i+1])/24.0;
g=g+h1;
}
for (j=0;j<=m-1;j++)
{ if (t[j]>=x[n-1]) i=n-2;
else
{ i=0;
while (t[j]>x[i+1]) i=i+1;
}
h1=(x[i+1]-t[j])/s[i];
h0=h1*h1;
z[j]=(3.0*h0-2.0*h0*h1)*y[i];
z[j]=z[j]+s[i]*(h0-h0*h1)*dy[i];
dz[j]=6.0*(h0-h1)*y[i]/s[i];
dz[j]=dz[j]+(3.0*h0-2.0*h1)*dy[i];
ddz[j]=(6.0-12.0*h1)*y[i]/(s[i]*s[i]);
ddz[j]=ddz[j]+(2.0-6.0*h1)*dy[i]/s[i];
h1=(t[j]-x[i])/s[i];
h0=h1*h1;
z[j]=z[j]+(3.0*h0-2.0*h0*h1)*y[i+1];
z[j]=z[j]-s[i]*(h0-h0*h1)*dy[i+1];
dz[j]=dz[j]-6.0*(h0-h1)*y[i+1]/s[i];
dz[j]=dz[j]+(3.0*h0-2.0*h1)*dy[i+1];
ddz[j]=ddz[j]+(6.0-12.0*h1)*y[i+1]/(s[i]*s[i]);
ddz[j]=ddz[j]-(2.0-6.0*h1)*dy[i+1]/s[i];
}
delete[] s;
return(g);
}
如果不能保证,z[j]=(3.0*h0-2.0*h0*h1)*y[i];
z[j]=z[j]+s[i]*(h0-h0*h1)*dy[i];这两句不是有危险??
但发现个问题,注释掉delete[] s;行后,程序就能算完了,但是后面几步计算出来的结果是1#QUAN了。