首页 > 解决方案 > 使我的函数防崩溃会导致分段错误:11

问题描述

我正在制作一个程序,将有关车辆的信息保存在由结构组成的数组中,然后将其打印到文件中。程序中包括添加和删除车辆以及打印保存的车辆和删除车辆的选项。选择要删除或打印的车辆时,我必须确保用户的输入是整数以防止其崩溃,如果不是整数,则给出自定义错误消息并给用户另一个输入机会. 我尝试了几种不同的方法,最新的方法似乎很有希望,但是在运行这些函数时,无论我输入整数还是字符,我都会得到“分段错误:11”。

如果没有应该防止崩溃的代码行,这些功能似乎可以正常工作。有人可以告诉我是什么导致了错误或可能的问题解决方法。谢谢!

这些是导致问题的功能:

移除车辆的函数:该函数接受结构数组以及计算数组中占用点数的 int 计数器。然后,该函数以 int 的形式从用户那里获取输入,以选择要删除的位置。位置不能大于 counter 或小于 0。

//Ta bort ett fordon
void del(int counter, fordon_t reg[])
{
    int pos;
    int i;
    do{
        printf("Vilken position ska tas bort?:");
        char *tmp;
        scanf("%s", tmp);
        pos = atoi(tmp);
        if (pos == 0)
        {
            printf("Var god och skriv en siffra\n");
        }
    }   
    while(pos == 0);
    if(pos<0 || pos>=counter)
    {
        printf("Ogiltig position\n");
    }
    else
    {
        for(i=pos+1; i<counter; i++)
        {
            reg[i-1]=reg[i];
        }
        counter--;
        for(i=0; i<counter; i++)
        {
            printf("%s %d %s %s %s\n", reg[i].owner.name, reg[i].owner.age, reg[i].type, reg[i].brand, reg[i].regnum);
        }
    }
}

打印所选车辆的功能:此功能的工作方式与前一个功能相同,但不是删除所选位置,而是打印该位置的信息。

//Skriv ut specifikt fordon
void print_out(int counter, fordon_t reg[])
{
    int val;
    do
    {
        char *tmp;
        printf("Vilken postition vill du se?:");
        scanf("%s", tmp);
        val = atoi(tmp);
        if (val == 0)
        {
            printf("Var god och skriv en siffra\n");
        }
    }   
    while(val == 0);
    if(val<0 || val>=counter)
    {
        printf("Ogiltig position\n");
    }
    else
    {
        printf("%s %d %s %s %s\n", reg[val].owner.name, reg[val].owner.age, reg[val].type, reg[val].brand, reg[val].regnum);
    }
}

如果需要有关我的程序的其他信息来解决该程序,请告诉我,我将提供更多代码。

标签: c

解决方案


推荐阅读