我正在制作一个使用索引操作文件的程序,但是当我尝试调试我的一个函数时,我遇到了阻塞我的问题:“地址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超出范围”!!我该如何解决这个问题?
答案 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);
如果您启用了所有编译器警告,则会收到警告,指出参数不匹配(实际上更像是错误)。