奥古斯丁少爷 发表于 2016-3-11 22:39:52

C语言 线性表问题

[#define Size 100
#include<stdio.h>
#include<stdlib.h>
struct List {
    intMaxsize;//线性表所能保存的最多数据
   
        intlength;//表示 线性表实际保存的数的数量
};
int Getnum(struct List a,int i,int *num)//搜索某个位置的值 ,a为传入的链表,i为查找的第几个位置的数,num保存查找到的数
{
        if(i<1||i>a.length)//判断这个位置是否在表中
        {
                return 0;
        }
        *num=a.Maxsize;//赋值
        printf("%d",*num);
        return 0;
}
int main( ){
        printf("请输入你要保存的数据数量(最大为100)");
        scanf("%d",&a.length);
        printf("请输入你要保存的数据");
        for(int i=0;i<a.length;i++)
        {
                scanf("%d",&a.Maxsize );
        }
        int * p;
        Getnum(a,6,p);//查找了第六个位置的值
        return 0;
}
出现了这个错误,因为我让他查找第六个位置,所以我输入七个数他就会出错,如果只输入小于6的就不会有问题,说明是那个查找的函数有问题,我试了下发现是*num=a.Maxsize;//赋值
这句有问题,我把这个屏蔽了他就不会出错,但我不知道这句有什么问题

n0noper 发表于 2016-3-12 08:21:23

1. a在哪里定义的?main里边不认识哈;
2. scanf("%d", &a.MaxSize); 修改为 scanf("%d", &a.MaxSize); 否则你总是给第一个数(a.MaxSize)赋值;
3. int *p; 这个直接使用,称为野指针胡作非为!可以使用如下方式,也可以其他方式,自己测试:
        int p = 0;        // 变量最好赋初始值,防备你有时候头脑一热直接使用导致意想不到的结果
        Getnum(a, 6, &p);

附:如你所说"当输入小于6时就可以",那是因为你Getnum第一句就不让他过啊-_-

奥古斯丁少爷 发表于 2016-3-12 10:58:58

n0noper 发表于 2016-3-12 08:21
1. a在哪里定义的?main里边不认识哈;
2. scanf("%d", &a.MaxSize); 修改为 scanf("%d", &a.MaxSize); 否 ...

谢谢谢谢,第一和第二点是复制的时候没复制好,我有做的,问题是第三点,那个野指针的问题,我改成int p=0Getnum( a,6,&p)   就可以了,谢谢
页: [1]
查看完整版本: C语言 线性表问题