C语言中的地址越界
我正在制作一个使用索引操作文件的程序,但当我尝试调试我的一个函数时,遇到了一个阻碍我的问题:“地址0x6超出界限”。我真的在网上搜索过,也在这里搜索过StackOverflow,我发现了类似的问题,但没有一个能帮我解决问题。代码非常长(约2300行),因此我只需将生成错误的代码放在前面(我不确定这一点,但至少之前没有发生任何事情) 这是consultRMA的函数C语言中的地址越界,c,C,我正在制作一个使用索引操作文件的程序,但当我尝试调试我的一个函数时,遇到了一个阻碍我的问题:“地址0x6超出界限”。我真的在网上搜索过,也在这里搜索过StackOverflow,我发现了类似的问题,但没有一个能帮我解决问题。代码非常长(约2300行),因此我只需将生成错误的代码放在前面(我不确定这一点,但至少之前没有发生任何事情) 这是consultRMA的函数 int consultRMA(LnOVC *f, char region[MAX_REG_MILIT], int bIAge,
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;
}
int consultRMA(LnOVC*f,字符区域[MAX_REG_milti],int bIAge,int bSAge,indexSecondRegMilit选项卡[6],tabIndxAge IndxAge,index_primaraire tabPrm[])
/**咨询人兜售注册相关的联合国区域军事区域,该区域位于两个不同的年龄段*/
{
int i,m=0,n,k,r;
如果(strcmp(区域,“1RM Blida”)==0)
{
对于(i=0;i 如果((IndxAge.tab[m].age>=bIAge)&(IndxAge.tab[m].age=bIAge)&&(IndxAge.tab[m].age=bIAge)&&(IndxAge.tab[m].age=bIAge)&(IndxAge.tab[m].age=bIAge)&&(IndxAge.tab[m].age=bIAge)&(IndxAge.tab[m].age传递给顾问的参数不匹配:
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);
但它可能应该这样称呼:
consultRMA(fichier, bi, bs, s, tabRM, AgeIndx, tableIndexPrim);
consultRMA(fichier, s, bi, bs, tabRM, AgeIndx, tableIndexPrim);
如果启用了所有编译器警告,则会收到参数不匹配的警告(实际上更像是一个错误)。寻求调试帮助的问题(为什么此代码不起作用?)必须包括所需的行为、特定的问题或错误以及在问题本身中重现问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建问题陈述。@drsimplist您的上一条评论相互矛盾。问题显然在consultRMA
函数中打开,因为在调用strcpy时出现分段错误。如果需要帮助,请回答您的问题,并至少向我们显示consultRMA
的前几行。顺便说一句:consultRMA
可能会短5-6倍。您有6个几乎相同的循环,它们只因选项卡[1]中使用的索引不同而不同
,选项卡[2]
等等。我还需要说更多吗?好吧,任何像for…{if(thing){indented_stuff()}}
可以更好地表示为for…{if(!thing){continue;}/*non_indented_stuff()}
,首先。天啊,非常感谢,我不敢相信原因是如此愚蠢的错误,我检查了参数,但我太累了,没有注意到x()()()())))非常感谢