gpt4 book ai didi

c - C 中的地址越界

转载 作者:行者123 更新时间:2023-11-30 21:27:45 25 4
gpt4 key购买 nike

我正在制作一个使用索引操作文件的程序,但是当我尝试调试我的函数之一时,我遇到了一个阻碍我的问题:“地址 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;
}

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

最佳答案

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

consultRMA的原型(prototype)是:

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);

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

关于c - C 中的地址越界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48090982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com