问题是这样的:
小弟在学《数据结构题集》(严蔚敏 吴伟民)第一章的算法设计题1.17有关裴波那契序列时原题如下:
已知k阶裴波那契序列的定义为
f(0)=f(1)=f(2)...=f(k-2)=0,f(k-1)=1;
f(n)=f(n-1)+f(n-2)+...+f(n-k),n=k,k+1,...
试编写求k阶裴波那契序列的第m项值的函数算法,k和m均以值调用的形式在函数参数表中出现。问题本身没什么,我用VC++6.0新建了WIn32 Console Application工程,并将stdafx.h中的#include <stdio.h>替换为#include <iostream.h>然后写下了如下代码:
#include "stdafx.h"
long double FBNQK(int k,int m,long double pFBNQ[]);
int main(int argc, char* argv[])
{
int k,m;
long double V;
char YN;
do
{
cout<<"请输入裴波那契序列的阶数:\n";
cin>>k;
cout<<"请输入要获得的裴波那契序列的项号:\n";
cin>>m;
long double* pFBNQ=new long double[m];
if(pFBNQ == 0)
{
cout<<"内存分配失败!\n";
return 0;
}
V=FBNQK(k,m,pFBNQ);
if(V < 0)
{
cout<<"计算失败!\n";
}
else
{
cout<<"要获得的裴波那契序列的第"<<m<<"项的值为"<<V;
}
//出问题的地方
delete []pFBNQ;
cout<<"是否继续?<y继续>:";
cin>>YN;
}
while(YN == 'y');
return 0;
}
long double FBNQK(int k,int m,long double pFBNQ[])
{
int i;
if(k<2 || m<=0)
{
return -1;
}
if(m < k-1)
{
return 0;
}
else if(m==k-1 || m==k)
{
return 1;
}
else
{
for(i = 0; i < k-1; i++)
{
pFBNQ[i]=0;
}
pFBNQ[k-1]=1;
for(i = k; i <= m; i++)
{
pFBNQ[i] = pFBNQ[i-1] * 2 - pFBNQ[i-k];
}
return pFBNQ[m];
}
}编译通过,但是执行时报错:
Debug Error!
Program: ...
DAMAGE:after Normal block(#44) at 0x00441A60经过确认发现
delete []pFBNQ;
语句有问题,将该语句注释后一切正常,但是没有该语句不会造成内存泄漏吗?我重新简化程序如下:
#include "stdafx.h"
int main(int argc, char* argv[])
{
int m;
cin>>m;
long double *pFBNQ=new long double[m];
delete []pFBNQ;
return 0;
}这回一切正常。为什么,问题出在哪里?
希望指点,谢谢。
小弟在学《数据结构题集》(严蔚敏 吴伟民)第一章的算法设计题1.17有关裴波那契序列时原题如下:
已知k阶裴波那契序列的定义为
f(0)=f(1)=f(2)...=f(k-2)=0,f(k-1)=1;
f(n)=f(n-1)+f(n-2)+...+f(n-k),n=k,k+1,...
试编写求k阶裴波那契序列的第m项值的函数算法,k和m均以值调用的形式在函数参数表中出现。问题本身没什么,我用VC++6.0新建了WIn32 Console Application工程,并将stdafx.h中的#include <stdio.h>替换为#include <iostream.h>然后写下了如下代码:
#include "stdafx.h"
long double FBNQK(int k,int m,long double pFBNQ[]);
int main(int argc, char* argv[])
{
int k,m;
long double V;
char YN;
do
{
cout<<"请输入裴波那契序列的阶数:\n";
cin>>k;
cout<<"请输入要获得的裴波那契序列的项号:\n";
cin>>m;
long double* pFBNQ=new long double[m];
if(pFBNQ == 0)
{
cout<<"内存分配失败!\n";
return 0;
}
V=FBNQK(k,m,pFBNQ);
if(V < 0)
{
cout<<"计算失败!\n";
}
else
{
cout<<"要获得的裴波那契序列的第"<<m<<"项的值为"<<V;
}
//出问题的地方
delete []pFBNQ;
cout<<"是否继续?<y继续>:";
cin>>YN;
}
while(YN == 'y');
return 0;
}
long double FBNQK(int k,int m,long double pFBNQ[])
{
int i;
if(k<2 || m<=0)
{
return -1;
}
if(m < k-1)
{
return 0;
}
else if(m==k-1 || m==k)
{
return 1;
}
else
{
for(i = 0; i < k-1; i++)
{
pFBNQ[i]=0;
}
pFBNQ[k-1]=1;
for(i = k; i <= m; i++)
{
pFBNQ[i] = pFBNQ[i-1] * 2 - pFBNQ[i-k];
}
return pFBNQ[m];
}
}编译通过,但是执行时报错:
Debug Error!
Program: ...
DAMAGE:after Normal block(#44) at 0x00441A60经过确认发现
delete []pFBNQ;
语句有问题,将该语句注释后一切正常,但是没有该语句不会造成内存泄漏吗?我重新简化程序如下:
#include "stdafx.h"
int main(int argc, char* argv[])
{
int m;
cin>>m;
long double *pFBNQ=new long double[m];
delete []pFBNQ;
return 0;
}这回一切正常。为什么,问题出在哪里?
希望指点,谢谢。
解决方案 »
- 嵌入网页的播放器
- 列表控件中插入其它控件的方法
- 单片机中控制程序出错
- 各位大侠,我编了一套基于winsocket的c/s程序。服务器可以处理客户请求。可是服务器总是被动的,如果服务器想主动群发信息给各客户,请问
- 如何快速获得某字体下某个汉字的高宽
- 使用 MSDataGrid ,MSADO控件还需要哪些东西!!!!
- 请教图象处理中用于运动估计的源代码
- 一个初学者的问题:书!!!!
- 请教!可否在窗口非客户区作画?
- TinyXML 内存泄露 delete 堆栈溢出
- 承蒙各位热心好汉指引,小弟现在OpenGL入了个门了,但是现在我不知OpengGL如何与3d结合编程?希望好汉们不吝赐教,小弟这厢有礼了!
- 在ClassWizard中MemberVariable里为ControlsID添加变量与在ClassView中右键添加变量有何异同?
这行后面再加一行:
pFBNQ = NULL;//再试试
这行后面再加一行:
pFBNQ = NULL;//再试试试了,还是那个错误,编译是没问题但是执行时就会出错:
编译通过,但是执行时报错:
Debug Error!
Program: ...
DAMAGE:after Normal block(#44) at 0x00441A60