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

时间:2011-08-22 10:48:15

标签: c

这是一个简单的函数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;                    
}

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

1 个答案:

答案 0 :(得分:8)

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

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

或更简单

int day; 
int month; 

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

更新:正如@Eran Zimmerman指出的那样,你应该使用&amp;&amp; (逻辑AND)代替&amp; (按位AND)计算跳跃时。

相关问题