这段程序为什么出错?

来源:百度知道 编辑:UC知道 时间:2024/06/27 11:34:13
#include<iostream>
using namespace std;

int min( int a, int b )
{
if( a < b )
return a;
else
return b;
}

void main()
{
int *pCur, *pPre;
char *pStr;
int length;

cin >> length;

pCur = new int[length];
pPre = new int[length];
pStr = new char[length+1];
pPre[0] = pPre[1] = pCur[0] = pCur[1] = 0;

cin >> pStr;

for( int i = length-2; i >= 0; i-- )
{
for( int j = 2; j <= length - i; j++ )
{
if( pStr[i] == pStr[i+j-1] )
pCur[j] = pPre[j-2];
else
pCur[j] = min( pCur[j-1], pPre[j-1] ) + 1;
}

if( i == 0 )
continue;

int *pTemp;
pTemp = pPre;
pPre = pCur;
pCur = pTemp;
}

cout << pCur[length] << endl;

/* delete []pCur;
delete []pPre;
delete []pStr; */

注释部分无错,错误在前面。

应该是越界了吧
pStr = new char[length+1];
下面你又有
for( int i = length-2; i >= 0; i-- )
{
for( int j = 2; j <= length - i; j++ )
{
if( pStr[i] == pStr[i+j-1] )

Str[i+j-1],j=3的时候就越界了