问题是这样的:
小弟在学《数据结构题集》(严蔚敏 吴伟民)第一章的算法设计题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.   

    delete []pFBNQ;
    这行后面再加一行:
    pFBNQ = NULL;//再试试
      

  2.   

    delete []pFBNQ;
    这行后面再加一行:
    pFBNQ = NULL;//再试试试了,还是那个错误,编译是没问题但是执行时就会出错:
    编译通过,但是执行时报错:
    Debug Error!
    Program: ...
    DAMAGE:after Normal block(#44) at 0x00441A60
      

  3.   

    如果是delete [];编译都通不过
      

  4.   

    这个问题很可能是内存访问越界了. 仔细检查你有算法. 有没有对数组越界操作. new  出来的 数组, 一定要用对应的 delete [] 来删除
      

  5.   

    谢谢,我一时粗心在new时少分配了一个元素