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

谁能帮我看看这程序怎么一直提醒 非法间接寻址???

只愿时光清浅 发布于 2015-04-15 10:31, 439 次点击
#include<iostream>
using namespace std;
void main()
{
    int fun2(int x,int *t);
    int fun(int x,int *r);
    int i,j,k,m,n;
    int a[10];
    int *p=a;
    cout<<"请输入成绩:"<<endl;//={2,4,6,8,10,12,14,16,18,20}
    for(i=0;i<10;i++)
    {
        cin>>a[i];
        cout<<a[i]<<"   "<<endl;
    }
    cout<<"请输入查找的数:"<<endl;
    cin>>m;
    fun(m,p);
    cout<<"你要查找的数是第"<<i+1<<"个数"<<endl;
    cout<<"请输入要删除的数:";
    cin>>n;
    fun(n,p);
    cout<<"你要删除的数是第"<<i+1<<"个数"<<endl;
    for(j=i;j<10;j++)
    {
        a[j]=a[j+1];
    }
    cout<<"删除后的数组:";
    for(i=0;i<10;i++)
    {
        cout<<a[i]<<"   "<<endl;
    }
    cout<<"请输入添加的数:"<<endl;
    cin>>k;
    fun2(k,p);

    cout<<"你要添加的数是第"<<i<<"个数"<<endl;
    for(j=9;j>i;j--)
    {
        a[j]=a[j-1];
        a[i]=k;
    }
}
int fun(int x,int &r)
{
    int i;
    for(i=0;i<10;i++)
    {
        if(*(r++)==x) break;
    }
    if(i>=10)
        cout<<"查无此数!"<<endl;
    else return i;
}
    int fun2(int x,int &t)
{
    int i;
    for(i=0;i<10;i++)
    {
        if(x<=*(t++)) break;
    }
    if(i>=9)
        cout<<"查无此数!"<<endl;
    else return i;
}
4 回复
#2
wmf20142015-04-15 10:49
大概是指针未初始化、指针数组越界
#3
wp2319572015-04-15 10:55
以下是引用wmf2014在2015-4-15 10:49:12的发言:

大概是指针未初始化、指针数组越界



不对,是无法通过编译  楼主是把引用当成指针使用了
#4
AleTiff2015-04-15 11:07
#include<iostream>
using namespace std;

void main()
{
    int fun2(int x,int *t);
    int fun(int x,int *r);
    int i,j,k,m,n;
    int a[10] = {2,4,6,8,10,12,14,16,18,20};
    int *p=a;
    // 下面代码注释掉的原因是: 已经对 a[] 数组赋值, 不需要手工输入了
    //cout<<"请输入成绩:"<<endl;//={2,4,6,8,10,12,14,16,18,20}
    //for(i=0;i<10;i++)
    //{
    //    cin>>a[i];
    //    cout<<a[i]<<"   "<<endl;
    //}
    cout<<"请输入查找的数:"<<endl;
    cin>>m;
    i = fun(m,p); // 这里要让 i 得到返回值
    cout<<"你要查找的数是第"<<i+1<<"个数"<<endl;

    cout<<"请输入要删除的数:";
    cin>>n;
    i = fun(n,p);  // 这里要让 i 得到返回值
    cout<<"你要删除的数是第"<<i+1<<"个数"<<endl;

    //for(j=i;j<10;j++)
    //{
    //    a[j]=a[j+1];
    //}
    for(j=0;j<10;j++)
    {
        // 要保证各种状态下的访问都是充分考虑到的:
        if(j >= i && j != 9 ){
            a[j]=a[j+1];
            a[j+1] = 0;
        }else{
            if(j >= i && j == 9)
                a[j] = 0;
        }
    }
    cout<<"删除后的数组:\n";
    for(i=0;i<10;i++)
    {
        cout<<a[i]<<"   "<<endl;
    }

    // == 下面代码含义不明,无法确定是否正确, 也就无法修改
    //cout<<"请输入添加的数:"<<endl;
    //cin>>k;
    //i = fun2(k,p); // 这里要让 i 得到返回值

    //cout<<"你要添加的数是第"<<i<<"个数"<<endl;
    //for(j=9;j>i;j--)
    //{
    //    a[j]=a[j-1];
    //    a[i]=k;
    //}
}

int fun(int x,int* r /*int &r*/)  // 已经是指针了,就没必要利用引用传值
{
    int i;
    bool find = false; // 增加一个标志
    for(i=0;i<10;i++)
    {
        //if(*(r++)==x) break;
        if(*r==x){ find = true; break;}
        r++;
    }
    if(!find)
        cout<<"查无此数!"<<endl;
    else return i;
}

int fun2(int x,int* t /*int &r*/) // 已经是指针了,就没必要利用引用传值
{
    int i;
    bool find = false; // 增加一个标志
    for(i=0;i<10;i++)
    {
        //if(x<=*(t++)) break;
        if( x == *t) {find = true; break;}
        t++;
    }
    if(!find)
        cout<<"查无此数!"<<endl;
    else return i;
}
#5
yangfrancis2015-04-15 18:09
for(j=i;j<10;j++)
在这个循环条件下不敢访问第j+1个元素吧。
1