红联Linux门户
Linux帮助

段错误(吐核) 求解~~

发布时间:2013-09-22 13:03:44来源:红联作者:shui2104
#include
#include
typedef struct
{
int data[1000];
int length;
}lv;
void su(lv *&l,int n)
{
int i;
l->length=0;
l=(lv *)malloc(sizeof(lv));
for(i=0;i {
scanf("%d",&l->data);
l->length++;
}
}
int md(int item,lv *l)
{
int i=0;
while(ilength&&l->data[i]!=item)
{
i++;
}
if(i>l->length)
{
return 0;
}
else
{
return i+1;
}
}
int main()
{
lv *l;
int k,item,p,n;
scanf("%d",&n);
su(l,n);
scanf("%d%d",&item,&p);
k=md(item,l);
if(k==0)
{
l->data[n]=p;
}
else
{
int i;
for(i=n;i>=k;i--)
{
l->data[i]=l->data[i-1];
}
l->data[k]=p;
}
int q=0;
while(q<=n)
{
if(q==n)
{
printf("%d\n",l->data[q]);
}
else
{
printf("%d ",l->data[q]);
}
q++;
}
free(l);
return 0;
}
文章评论

共有 4 条评论

  1. yongy1978 于 2014-06-16 15:07:06发表:

    学习了,自己在编程时也经常遇到段错误!

  2. guxinglei15 于 2013-09-25 13:41:46发表:

    #include
    #include

    #define ARRAY_LENGTH 1000

    typedef struct
    {
    int data[ARRAY_LENGTH];
    int length;
    }lv;

    void su(lv *l,int n)
    {
    if(l == NULL)
    {
    return;//此处做一个判空
    }
    if(n >=ARRAY_LENGTH)//越界
    {
    return ;
    }
    int i;
    //l->length=0;
    //l=(lv *)malloc(sizeof(lv));//内存泄露
    for(i=0;i {
    scanf("%d", &l->data[i]);//数组直接是地址,不需要再次取地址
    l->length++;
    }
    }
    int md(int item,lv *l)
    {
    if(l == NULL)
    {
    return -1;//判空
    }
    int i=0;
    while(ilength && l->data[i]!=item)
    {
    i++;
    }
    if(i > l->length)
    {
    return 0;
    }
    else
    {
    return i+1;
    }
    }
    int main()
    {
    lv *l = (lv *)malloc(sizeof(lv));
    if(l == NULL)
    {
    return -1;//内存分配失败
    }
    memset(l, 0, sizeof(lv));//初始化

    int k,item,p,n;
    scanf("%d",&n);
    su(l,n);
    scanf("%d%d",&item,&p);
    k=md(item,l);
    if(n >= ARRAY_LENGTH)
    {
    return -1;//越界
    }
    if(k==0 )
    {
    l->data[n]=p;
    }
    else
    {
    int i;
    for(i=n;i>=k;i--)
    {
    l->data[i]=l->data[i-1];
    }
    l->data[k]=p;
    }
    int q=0;
    while(q<=n)
    {
    if(q==n)
    {
    printf("%d\n",l->data[q]);
    }
    else
    {
    printf("%d ",l->data[q]);
    }
    q++;
    }
    if(l != NULL)
    {
    free(l);
    l = NULL;//避免野指针
    }

    return 0;
    }

    注意事项:
    指针使用前,需要判空操作;
    分配内存和释放内存最好在同一个层次上进行;
    注意数组越界;
    使用宏代替"魔数"

  3. guxinglei15 于 2013-09-25 13:39:58发表:

    如果有段错误,使用gdb跟踪一下,具体用法百度一下即可

  4. guxinglei15 于 2013-09-25 13:39:23发表:

    #include
    #include

    #define ARRAY_LENGTH 1000

    typedef struct
    {
    int data[ARRAY_LENGTH];
    int length;
    }lv;

    void su(lv *l,int n)
    {
    if(l == NULL)
    {
    return;//此处做一个判空
    }
    if(n >=ARRAY_LENGTH)//越界
    {
    return ;
    }
    int i;
    //l->length=0;
    //l=(lv *)malloc(sizeof(lv));//内存泄露
    for(i=0;i {
    scanf("%d", &l->data[i]);//数组直接是地址,不需要再次取地址
    l->length++;
    }
    }
    int md(int item,lv *l)
    {
    if(l == NULL)
    {
    return -1;//判空
    }
    int i=0;
    while(ilength && l->data[i]!=item)
    {
    i++;
    }
    if(i > l->length)
    {
    return 0;
    }
    else
    {
    return i+1;
    }
    }
    int main()
    {
    lv *l = (lv *)malloc(sizeof(lv));
    if(l == NULL)
    {
    return -1;//内存分配失败
    }
    memset(l, 0, sizeof(lv));//初始化

    int k,item,p,n;
    scanf("%d",&n);
    su(l,n);
    scanf("%d%d",&item,&p);
    k=md(item,l);
    if(n >= ARRAY_LENGTH)
    {
    return -1;//越界
    }
    if(k==0 )
    {
    l->data[n]=p;
    }
    else
    {
    int i;
    for(i=n;i>=k;i--)
    {
    l->data[i]=l->data[i-1];
    }
    l->data[k]=p;
    }
    int q=0;
    while(q<=n)
    {
    if(q==n)
    {
    printf("%d\n",l->data[q]);
    }
    else
    {
    printf("%d ",l->data[q]);
    }
    q++;
    }
    if(l != NULL)
    {
    free(l);
    l = NULL;//避免野指针
    }

    return 0;
    }

    注意事项:
    指针使用前,需要判空操作;
    分配内存和释放内存最好在同一个层次上进行;
    注意数组越界;
    使用宏代替"魔数"