gpt4 book ai didi

c - C 中指针中的访问冲突错误

转载 作者:太空宇宙 更新时间:2023-11-04 00:32:41 25 4
gpt4 key购买 nike

这是一个简单的函数 month_day,它将一年中的某一天转换为月份和日期。这是来自 C 教程的一些修改。

我不知道,当我运行这个时我得到

"....... Access violation at address 004011DD ....." error stopping at
*month=i; //in daytellerlib.c file.

这是两个文件中的完整程序。文件 1:

#include<stdio.h>
#include<conio.h>
#include"daytellerlib.c"

int main()
{
int dayyear,year;
int *pday=0;
int *pmonth=0;

dayyear=99;
year=2011;

month_day(dayyear,year,pmonth,pday);
printf("dayyear=%d YEar=%d day=%d month=%d \n",dayyear,year,*pday,*pmonth);
getch();
return 0;
}

文件 2:

void month_day(int day,int year,int *,int *);


static table[2][13]={
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}
};


void month_day(int dayyear,int year,int *month,int *day)
{
int i=1,count=0,leap;

leap = year%4 == 0 &year%100 != 0 || year%400 == 0;
for(;dayyear>(count+=table[leap][i]);i++)
;
*month=i;
*day=dayyear+table[0][i]-count;
}

我知道这是因为我们正在访问具有其他地址的指针。

最佳答案

当您调用 month_day() 时,您正在将指针传递给没有与之关联的整数。

int day; 
int month;
int * pday = &day;
int * pmonth = &month;

或者更简单的说

int day; 
int month;

month_day(dayyear, year, &month, &day);

更新:正如@Eran Zimmerman 指出的那样,在计算 leap 时,您应该使用 &&(逻辑与)而不是 &(按位与)。

关于c - C 中指针中的访问冲突错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7146329/

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