C 退出主电源时出现故障

C 退出主电源时出现故障,c,unix,pointers,operating-system,segmentation-fault,C,Unix,Pointers,Operating System,Segmentation Fault,我正在编写一个非常基本的C程序,试图更好地理解时间库的工作原理,并进一步了解C。问题是,当我在主函数末尾返回0时,我得到了一个segfault。以下是节目内容: #include <stdio.h> #include <time.h> main() { time_t *now; time(now); struct tm *tp = localtime(now); printf("%s", asctime(tp)); return

我正在编写一个非常基本的C程序,试图更好地理解时间库的工作原理,并进一步了解C。问题是,当我在主函数末尾返回0时,我得到了一个segfault。以下是节目内容:

#include <stdio.h>
#include <time.h>

main()
{
    time_t *now;
    time(now);
    struct tm *tp = localtime(now);
    printf("%s", asctime(tp));
    return 0;
}
一切似乎都很好。但当我打n时

Cannot access memory at address 0x50303e0d
0x0000000050303e0d in ?? ()
我不明白是什么导致了这个错误。在main的末尾返回0以前从未伤害过我,而且内存地址与我正在使用的内存地址都不匹配。当我在终端运行我的程序时,我得到
分段错误:11

我能想到的唯一一件事是它与操作系统有关,这有几个原因——相对较低的内存地址,以及O.s.试图访问堆栈上要返回的内存地址时抛出的错误。但为什么会发生这种情况呢?我对操作系统知之甚少(我正在学习C,这样我就可以跳过一门课程要求,选修我大学提供的操作系统课程),所以这可能是一个非常简单的问题。我试着在同一个目录下运行另一个C程序,结果很好。

你现在没有初始化
,或者你想在堆栈上初始化它,比如

#include <stdio.h>
#include <time.h>

main()
{
    time_t now;
    time(&now);
    struct tm *tp = localtime(&now);
    printf("%s", asctime(tp));
    return 0;
}
#包括
#包括
main()
{
现在是时候了;
时间(现在);
struct tm*tp=localtime(&now);
printf(“%s”,asctime(tp));
返回0;
}

我很惊讶这能奏效。你能解释一下我做错了什么,为什么错了吗?还有,为什么我会出现这样的错误?因为你在某个地方过度编写了随机内存。
我很惊讶这能起作用。
为什么?。无论如何,由于您现在从未初始化
它可能包含任何垃圾,如果它是一个有效地址,则
时间
将覆盖它所指向的任何位置,这可能会导致上述错误:如果您不想使用参数,原型是
int main(void)
。如果您打开了所有警告级别,那么您遇到的错误应该已经被任何体面的编译器发现,对于gcc来说,这将是
-Wall
。我的gcc告诉我“'now'在此函数中未初始化使用”
#include <stdio.h>
#include <time.h>

main()
{
    time_t now;
    time(&now);
    struct tm *tp = localtime(&now);
    printf("%s", asctime(tp));
    return 0;
}