| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1557 人关注过本帖
标题:一道c语言习题,找了很久不知道错误在哪
只看楼主 加入收藏
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
结帖率:85.71%
收藏
已结贴  问题点数:30 回复次数:8 
一道c语言习题,找了很久不知道错误在哪
程序有点长,但错误只在第二个函数,
原题要求是对输入的十个数字进行处理,使第一个数字是最小的数字,最后一个数字是最大的数字,要求用指针处理,代码如下:
#include <stdio.h>
static void scan_f(int *str[]);
static void proce_ss(int *str[]);
static void print_f(int *str[]);
static int str1[10];
int main()
{
    int i;
    int *str[10];
    for(i=0;i<10;i++)
    str[i]=&str1[i];
    scan_f(str);
    proce_ss(str);
    print_f(str);
    return 0;
}
static void scan_f(int *str[])
{
    int i;
    printf("Please input ten numbers:");
    for(i=0;i<10;i++)
    scanf("%d",&str1[i]);
    printf("\nthe original numbers are:");
    for(i=0;i<10;i++)
    printf("%d\t",*str[i]);
}
static void proce_ss(int *str[])
{
    int i,k,*min=str[0],*max=str[0];
    int*temp=NULL;
    for(i=0;i<10;i++)
    {
        if(*min>*str[i])
        {
          min=str[i];
          k=i;
        }
    }
    if(k!=0)
    {
        temp=str[0];
        str[0]=str[k];
        str[k]=temp;
    }
    for(i=0;i<10;i++)
    {
        if(*max<*str[i])
        {
          max=str[i];
          k=i;
        }
    }
    if(k!=9)
    {
        temp=str[0];
        str[0]=str[k];
        str[k]=temp;
    }
}
static void print_f(int *str[])
{
    int i;
    for(i=0;i<10;i++)
    printf("%d\t",*str[i]);
}
排查后确定问题在proce_ss这个函数,运行时警告segmentation fault,应该是非法访问内存,求教问题在哪?
PS:因为是初学指针,这道习题本身是很简单的,我所写的算法都是围绕尽可能多用指针,所以算法很粗糙,见谅
搜索更多相关主题的帖子: include return 最大的 c语言 
2017-02-11 16:04
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:15 
程序代码:
static void proce_ss(int *str[])
{
    int i,k,*min=str[0],*max=str[0];
    int temp;                    //
    for(i=0;i<10;i++)
    {
        if(*min>*str[i])
        {
          min=str[i];
          k=i;
        }
    }
    if(k!=0)
    {
        temp=*str[0];               //
        *str[0]=*str[k];            //
        *str[k]=temp;               //
    }
    for(i=0;i<10;i++)
    {
        if(*max<*str[i])
        {
          max=str[i];
          k=i;
        }
    }
    if(k!=9)
    {
        temp=*str[0];          //
        *str[0]=*str[k];       //
        *str[k]=temp;          //
    }
}


[此贴子已经被作者于2017-2-11 18:46编辑过]


早知做人那么辛苦!  当初不应该下凡
2017-02-11 18:37
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
收藏
得分:0 
回复 2楼 炎天
多些答复,你这个我当然懂也想过,但能否正面回答,就我的源代码回复,你改编的代码是使具体的数字互换,而我想把地址互换,为什么不可以??

............
2017-02-11 19:11
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:7 
if(k!=9)
    {
        temp=str[9];
        str[9]=str[k];
        str[k]=temp;
    }
其它错没看出来,运行没有问题
2017-02-11 20:41
惊悚s
Rank: 2
等 级:论坛游民
帖 子:3
专家分:12
注 册:2015-12-10
收藏
得分:8 
把k初始化试一下
2017-02-11 20:45
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:0 
除4楼所提出的
程序代码:
static void proce_ss(int *str[])
{
    int i,k=0,*min=str[0],*max=str[0];  //k=0; 
    int*temp=NULL;
    for(i=0;i<10;i++)
    {
        if(*min>*str[i])
        {
          min=str[i];
          k=i;
        }
    }
    if(k!=0)        //若上面的if()一直无法满足,k的值随便,
    {
        temp=str[0];
        str[0]=str[k];
        str[k]=temp;
    }


 
}

早知做人那么辛苦!  当初不应该下凡
2017-02-11 20:47
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
收藏
得分:0 
回复 4楼 linlulu001
谢谢答复,一个低级错误

............
2017-02-12 15:32
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
收藏
得分:0 
回复 6楼 炎天
嗯,多谢版主,以后会多加注意

............
2017-02-12 15:32
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
收藏
得分:0 
回复 5楼 惊悚s
谢谢

............
2017-02-12 15:33
快速回复:一道c语言习题,找了很久不知道错误在哪
数据加载中...
 
   



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

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