gpt4 book ai didi

C 程序因指针赋值而崩溃

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

我正在为 ANSI C 书中的一个练习编写程序,当我到达这一行时程序崩溃了:

*pmonth = i;

在函数 month_day 中。

#include <stdio.h>

void month_day(int year, int yearday, int *pmonth, int *pday);

int main(int argc, char *argv[]){
int year = 1994;
int *month;
int yearday = 288;
int *day;
month_day(year, yearday, month, day);
printf("Month = %d, day = %d", *month, *day);
return 1;
}

static char daytab[2][14] = {
{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 year, int yearday, int *pmonth, int *pday){
int i, leap;

leap = (year%4 == 0 && year%100 != 0) || year%400 == 0;
char *p = &daytab[leap][1];
for(i = 1; yearday> (int) *p; i++){
yearday -= *p++;
}
*pmonth = i; /*CRASHES HERE*/
*pday = yearday;
}

知道为什么会这样吗?我对指针比较陌生,所以我很容易犯一个愚蠢的错误。提前致谢。

编辑感谢你们的回答和耐心,试图掌握指点。

最佳答案

指针 pmonth 未初始化。所以你不应该取消引用它。您应该为指针分配一个有效地址。为此,您可以使用 & 运算符分配一个变量地址或调用 malloc(1)

因为您似乎不需要在主函数中使用指针,所以您的代码应该是:

int main(int argc, char *argv[]){
int year = 1994;
int month;
int yearday = 288;
int day;
month_day(year, yearday, &month, &day);
printf("Month = %d, day = %d", month, day);
return 1;
}

在这段代码中,我们将变量monthday 的地址赋予pmonthpday。这些变量存在于此上下文中,因此它们的地址是有效的。这样,pmonthpday 指向有效内存。

如果您的 main 函数中确实需要指针,请调用 malloc(1) 为您的程序分配内存并将此内存块的地址存储到您的指针中。

关于C 程序因指针赋值而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38485287/

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