C.在内部功能时主要但是分段错误

Mig*_*uel -4 c segmentation-fault

这段代码给出了一个分段错误但是如果测试函数体直接写在main函数中就可以正常工作.那么,您认为导致这个问题的是什么?

分段故障:

#include<stdio.h>

int test()
{
    int i=0;
    int *p;
    printf("pass\n");
    for (i = 0; i < 24; i++)
    {
        printf("%d\n",i);
        *(p+i) = i;
        printf("%d\n",*(p+i));
    }
    return 1;

}

int main() {
    int x = 0;
    x = test();
}
Run Code Online (Sandbox Code Playgroud)

工作正常:

int main() {
    int i=0;
    int *p;
    printf("pass\n");
    for (i = 0; i < 24; i++)
    {
        printf("%d\n",i);
        *(p+i) = i;
        printf("%d\n",*(p+i));
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:在给我一堆投票之前,请尝试代码.我知道编程很糟糕.我正在评估一些C代码exames并且有一个学生写了这个.是的,不是很好,但事实上工作版本实际上正在运行.

Jab*_*cky 7

p指针不会在两种情况下初始化.它包含未确定的值.

取消引用未初始化的指针是未定义的行为(google that).

在第一种情况下,你的指针p恰好偶然点的地方在那里的dereferencement不段错误结束(也就是有效的内存,你的进程被允许读取),但是在第二种情况下它指向哪里dereferencement另一个位置确实结束了一个段错误(即你的进程的内存dereferencement 不是允许读).