当代码被调试时,我的一个函数会抛出一个写访问异常,我不太清楚为什么。这个问题正在从我的computeFunction函数中抛出,它的目标是设置多个值。它在循环内部被调用,并有一堆int值传入,以及包含homeOffense (它是抛出异常的地址)的4个双倍的地址。
我看了一些代码来完成我想要做的事情,我看不出我一直在做的事情有什么不同。
void main() {
int homeAttackStrength, homeDefensiveStrength, homeGoalieRating, homeFieldAdvg, homeExp, visitAttackStrength,
visitDefensiveStrength, visitGoalieRating, visitRoad, visitExp, weather, hScore, vScore, gameCount, x;
double homeOffense, visitO, crowd, experience,homeWinCount,drawCount,homeWin,draw;
char home[20], visit[20];
FILE *fpi1, *fpo1;
fpi1 = fopen("soccer1.txt","r");
homeWinCount = 0;
drawCount = 0;
gameCount = 0;
x = 0;
while (getInput(fpi1, home, &homeAttackStrength, &homeDefensiveStrength, &homeGoalieRating, &homeFieldAdvg, &homeExp,
visit, &visitAttackStrength, &visitDefensiveStrength, &visitGoalieRating, &visitRoad, &visitExp, &weather) != EOF) {
computeFunctions(homeAttackStrength, homeDefensiveStrength, homeGoalieRating, homeFieldAdvg, homeExp, visitAttackStrength,
visitDefensiveStrength, visitDefensiveStrength, visitGoalieRating, visitRoad, visitExp, &homeOffense, &visitO, &crowd, &experience);
...
void computeFunctions(int homeAttackStrength, int homeDefensiveStrength, int homeGoalieRating, int homeFieldAdvg, int homeExp,
int visitAttackStrength, int visitDefensiveStrength, int visitGoalieRating, int visitRoad, int visitExp, double *homeOffense,
double *visitO, double *crowd, double *experience) {
*homeOffense= (HOME_SCORING_ADVANTAGE * homeAttackStrength + HOME_SCORING_ADJUSTMENT) / (((long double)visitDefensiveStrength + (long double)visitGoalieRating) * AWAY_IMPACT);
*visitO= ((long double)visitAttackStrength + (long double)visitExp) * AWAY_IMPACT - ((long double)homeDefensiveStrength + (long double)homeGoalieRating + homeExp * EXPERIENCE_ADJUSTMENT);
*crowd= HOME_FIELD_IMPACT * homeFieldAdvg / visitRoad;
*experience= ((long double)homeExp - (long double)visitExp) * EXPERIENCE_ADJUSTMENT;
}
错误是:
引发的异常:写入访问冲突。
homeOffense
为0x2
。
发布于 2019-06-02 22:53:47
很可能发生了访问冲突,因为您试图将一个长双写入一个双指针。长双人床的大小肯定比双倍大,因此,把长双人床写成双人床,最终会把它写到一个超出允许地址的地方。这类似于执行可能崩溃的*char_ptr = long_val。在写入homeOffense、visit0和经验指针之前,您能试着转换计算结果吗?也许它能解决坠机的问题。
https://stackoverflow.com/questions/56421601
复制