回 帖 发 新 帖 刷新版面

主题:初学者的一个笨问题,望高手解答一下!!

#include <iostream>
#include <iomanip>

using std::cout;
using std::cin;
using std::endl;
using std::setw;

int main()
{
    double* pvalue1 = 0;
    double* pvalue2 = 0;
    double tvalue = 0;
    int count = 1;
    int i = 0;
    
    for(;;)
    {
        cout << "请输入一个数字(输入0则退出):";
        cin >> tvalue;
        if(tvalue == 0)
            break;
        
        pvalue1 = new double[count];
        for(i = 0;i < (count-1);i++)
            *(pvalue1 + i) = *(pvalue2 + i);
        *(pvalue1+i) = tvalue;
        
        //红色部分为什么不能互换???为什么下面注释的语句会有错误????
[color=FF0000]        //delete[] pvalue2;
[color=FF0000]        //pvalue2 = pvalue1;
[color=FF0000]        //delete [] pvalue1;
[color=FF0000]        //pvalue1 = 0;[/color]
        
[color=FF0000]        pvalue2 = new double[count];
[color=FF0000]        for(i = 0;i < count;i++)
[color=FF0000]            *(pvalue2 + i) = *(pvalue1 + i);
[color=000000]        
        ++count;
    }

    for(i=0;i<count-1;i++)
    {
        cout << setw(6) << *(pvalue2+i);
        tvalue += *(pvalue2+i);
        if((i+1)%5==0)
        {
            cout << setw(6) << tvalue/5 << endl;
            tvalue=0;
        }

    }

    return 0;
}[/color]

回复列表 (共2个回复)

沙发

pvalue1 = new double[count];
        for(i = 0;i < (count-1);i++)
            *(pvalue1 + i) = *(pvalue2 + i);    //pvalue2是个空指针,擅自使用将会有灾难降临
        *(pvalue1+i) = tvalue;

板凳

C基础问题:你在使用一个缓冲区指针的时候,要保证它所指向的缓冲区空间在栈或堆上已被分配。

我来回复

您尚未登录,请登录后再回复。点此登录或注册