gpt4 book ai didi

C. 在 main 中正常,但在函数内部时出现段错误

转载 作者:行者123 更新时间:2023-11-30 21:14:18 24 4
gpt4 key购买 nike

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

段错误:

#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();
}

工作正常:

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));
}
}

编辑:在给我投大量反对票之前,请尝试一下代码。我知道这是糟糕的编程。我正在评估一些 C 代码考试,并且有一个学生写了这篇文章。是的,不是很好,但事实是工作版本确实可以工作。

最佳答案

在这两种情况下,p 指针均未初始化。它包含一个未确定的值。

取消引用未初始化的指针是未定义的行为(谷歌搜索)。

在第一种情况下,你的指针p碰巧指向取消引用不会以段错误结束的地方(即允许你的进程读取的有效内存),但在第二种情况,它指向另一个位置,在该位置取消引用确实最终导致段错误(取消引用您的进程不允许允许读取的内存)。

关于C. 在 main 中正常,但在函数内部时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44927431/

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