| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 439 人关注过本帖
标题:谁能帮我看看这程序怎么一直提醒 非法间接寻址???
只看楼主 加入收藏
只愿时光清浅
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-4-15
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
谁能帮我看看这程序怎么一直提醒 非法间接寻址???
#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;
}
搜索更多相关主题的帖子: include 
2015-04-15 10:31
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:5 
大概是指针未初始化、指针数组越界

能编个毛线衣吗?
2015-04-15 10:49
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:5 
以下是引用wmf2014在2015-4-15 10:49:12的发言:

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



不对,是无法通过编译  楼主是把引用当成指针使用了

DO IT YOURSELF !
2015-04-15 10:55
AleTiff
Rank: 3Rank: 3
等 级:论坛游侠
威 望:4
帖 子:64
专家分:157
注 册:2015-3-30
收藏
得分:5 
#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;
}
2015-04-15 11:07
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:5 
for(j=i;j<10;j++)
在这个循环条件下不敢访问第j+1个元素吧。
2015-04-15 18:09
快速回复:谁能帮我看看这程序怎么一直提醒 非法间接寻址???
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019832 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved