注册 登录
编程论坛 C++教室

菜鸟,,,,delete的问题..

fishviv 发布于 2011-04-20 22:08, 510 次点击
程序代码:
#include<iostream>
using namespace std;
void Longest(int * a )
{
    int sum = 0 , best_i , best_j;
    for(int i = 0 ; a[i] != -1 ; ++i)
    {
        int temp = 1 ;
        for(int j = ( i + 1 ) ;  ; ++j)
        {    if(a[j] == -1 )
            {    if(temp > sum)
                {
                    sum = temp ;
                    best_i = i ;
                    best_j = j - 1 ;
                }
                break;
            }
            else
            {    if(a[j] >= a[j - 1])
                    ++temp ;
                else
                {    if(temp > sum)
                    {
                        sum = temp ;
                        best_i = i ;
                        best_j = j - 1 ;
                    }
                    break;
                }
            }
        }
    }
    cout<<"该数组中最长的单调递增的子序列的长度是:" <<sum<<endl
        <<"范围是"<<best_i + 1<<"~"<<best_j + 1<<endl;
    return  ;
}
int main()
{    int * b = new int ;
    cout<<"请输入一组整数,-1 表示数组结束"<<endl;
    for(int i = 0 ; ; ++i  )
    {
        cin>>b[i];
        if(b[i] == -1)
            break;
    }
    Longest( b ) ;
    delete b ;
    return 0 ;
}
delete错误.   个人觉得没有错啊!!!!求助
6 回复
#2
rjsp2011-04-21 08:31
只要看 main 函数就行了
int * b = new int ;
……
cin>>b[i]; 你不觉得会越界吗?
#3
pangding2011-04-21 19:57
呵呵。这个错误确实很明显。可能是楼主对 new 存在理解上的错误。
#4
fishviv2011-04-21 23:15
回复 2楼 rjsp
能具体讲讲吗?貌似我的理解错误;
#5
fishviv2011-04-21 23:16
回复 3楼 pangding
能具体讲讲吗?记得指针可以做向量用,可以申请一块连续的内存,
#6
lucky5635912011-04-22 13:34
是不是释放了两次
#7
Lyone2011-04-22 14:23
回复 5楼 fishviv
int * b = new int ;
//这步你只告诉程序开辟了一个int空间,实际上你希望开辟一个int数组空间。所以应该int* b=new int[n];n为数组数量。
//释放时用delete[] b;
1