地址超出了C的范围

时间:2018-01-04 07:59:16

标签: c

我正在制作一个使用索引操作文件的程序,但是当我尝试调试我的一个函数时,我遇到了阻塞我的问题:“地址0x6超出界限”。我真的在网上搜索过,也在StackOverflow上搜索过,我发现了类似的问题,但没有一个能帮我解决问题。代码真的很长(大约2300行),所以我只需要为我生成错误的代码(我不确定,但至少没有任何事情发生在它之前)

char s[21]="";
   int bi, bs;
   scanf("%s", s);
   scanf("%d", &bi);
   scanf("%d", &bs);
   consultRMA(fichier,bi, bs, s, tabRM, AgeIndx,tableIndexPrim);

这是函数consultRMA

    int consultRMA(LnOVC *f, char region[MAX_REG_MILIT], int bIAge, int bSAge, indexSecondRegMilit tab[6], tabIndxAge IndxAge, index_primaire tabPrm[])
/** consulter tout les enregistrement relatifs a une region militaire region ayant un age entre deux valeurs bIAge et bSAge (resp.)*/
{
    int i, m = 0,n, k, r;
    if (strcmp(region, "1RM-Blida") == 0)
    {
        for(i = 0; i < tab[0].nbMatric; i++)
        {
            if(tab[0].tab[i].suppr == 0)
            {
                for(m = 0; m < IndxAge.taille; m++)
                {
                    if((IndxAge.tab[m].age >= bIAge) && (IndxAge.tab[m].age <= bSAge))
                    {
                        for(n = 0; n < IndxAge.tab[m].nbMatric; n++)
                        {
                            if(IndxAge.tab[m].tab[n].matricule == tab[0].tab[i].matricule)
                            {
                                k = rechIndexPrim(tab[0].tab[i].matricule, tabPrm, *f);
                                if(k != -1)
                                {
                                    r = tabPrm[k].pos;
                                    afficheEnreg(f, tabPrm[k].n_bloc, &r);
                                }
                            }
                        }
                    }
                }
            }
        }
    }else if (strcmp(region, "2RM-Oran") == 0)
         {
            for(i = 0; i < tab[1].nbMatric; i++)
            {
                if(tab[1].tab[i].suppr == 0)
                {
                    for(m = 0; m < IndxAge.taille; m++)
                    {
                        if((IndxAge.tab[m].age >= bIAge) && (IndxAge.tab[m].age <= bSAge))
                        {
                            for(n = 0; n < IndxAge.tab[m].nbMatric; n++)
                            {
                                if(IndxAge.tab[m].tab[n].matricule == tab[1].tab[i].matricule)
                                {
                                    k = rechIndexPrim(tab[1].tab[i].matricule, tabPrm, *f);
                                    if(k != -1)
                                    {
                                        r = tabPrm[k].pos;
                                        afficheEnreg(f, tabPrm[k].n_bloc, &r);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }else if (strcmp(region, "3RM-Bechar") == 0)
            {
                for(i = 0; i < tab[2].nbMatric; i++)
                {
                    if(tab[2].tab[i].suppr == 0)
                    {
                        for(m = 0; m < IndxAge.taille; m++)
                        {
                            if((IndxAge.tab[m].age >= bIAge) && (IndxAge.tab[m].age <= bSAge))
                            {
                                for(n = 0; n < IndxAge.tab[m].nbMatric; n++)
                                {
                                    if(IndxAge.tab[m].tab[n].matricule == tab[2].tab[i].matricule)
                                    {
                                        k = rechIndexPrim(tab[2].tab[i].matricule, tabPrm, *f);
                                        if(k != -1)
                                        {
                                            r = tabPrm[k].pos;
                                            afficheEnreg(f, tabPrm[k].n_bloc, &r);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }else if (strcmp(region, "4RM-Ouargla") == 0)
            {
                    for(i = 0; i < tab[3].nbMatric; i++)
                        {
                            if(tab[3].tab[i].suppr == 0)
                            {
                                for(m = 0; m < IndxAge.taille; m++)
                                {
                                    if((IndxAge.tab[m].age >= bIAge) && (IndxAge.tab[m].age <= bSAge))
                                    {
                                        for(n = 0; n < IndxAge.tab[m].nbMatric; n++)
                                        {
                                            if(IndxAge.tab[m].tab[n].matricule == tab[3].tab[i].matricule)
                                            {
                                                k = rechIndexPrim(tab[3].tab[i].matricule, tabPrm, *f);
                                                if(k != -1)
                                                {
                                                    r = tabPrm[k].pos;
                                                    afficheEnreg(f, tabPrm[k].n_bloc, &r);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }else if (strcmp(region, "5RM-Constantine") == 0)
                        {
                    for(i = 0; i < tab[4].nbMatric; i++)
                    {
                        if(tab[4].tab[i].suppr == 0)
                        {
                            for(m = 0; m < IndxAge.taille; m++)
                            {
                                if((IndxAge.tab[m].age >= bIAge) && (IndxAge.tab[m].age <= bSAge))
                                {
                                    for(n = 0; n < IndxAge.tab[m].nbMatric; n++)
                                    {
                                        if(IndxAge.tab[m].tab[n].matricule == tab[4].tab[i].matricule)
                                        {
                                            k = rechIndexPrim(tab[4].tab[i].matricule, tabPrm, *f);
                                            if(k != -1)
                                            {
                                                r = tabPrm[k].pos;
                                                afficheEnreg(f, tabPrm[k].n_bloc, &r);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }else if (strcmp(region, "6RM-Tamanrasset") == 0)
                    {
                        for(i = 0; i < tab[5].nbMatric; i++)
                        {
                            if(tab[5].tab[i].suppr == 0)
                            {
                                for(m = 0; m < IndxAge.taille; m++)
                                {
                                    if((IndxAge.tab[m].age >= bIAge) && (IndxAge.tab[m].age <= bSAge))
                                    {
                                        for(n = 0; n < IndxAge.tab[m].nbMatric; n++)
                                        {
                                            if(IndxAge.tab[m].tab[n].matricule == tab[5].tab[i].matricule)
                                            {
                                                k = rechIndexPrim(tab[5].tab[i].matricule, tabPrm, *f);
                                                if(k != -1)
                                                {
                                                    r = tabPrm[k].pos;
                                                    afficheEnreg(f, tabPrm[k].n_bloc, &r);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
    return 0;
}

当我调试时,我在手表中发现字符串s是:“地址0x6超出范围”!!我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您传递给consultRMA的参数不匹配:

consultRMA的原型是:

int consultRMA(LnOVC *f, char region[MAX_REG_MILIT], int bIAge, int bSAge,
               indexSecondRegMilit tab[6], tabIndxAge IndxAge, index_primaire tabPrm[]);

但你这样称呼它:

consultRMA(fichier, bi, bs, s, tabRM, AgeIndx, tableIndexPrim);

但它应该像这样调用:

consultRMA(fichier, s, bi, bs, tabRM, AgeIndx, tableIndexPrim);

如果您启用了所有编译器警告,则会收到警告,指出参数不匹配(实际上更像是错误)。