【发布时间】:2017-07-05 13:18:51
【问题描述】:
这段代码给出了分段错误,但如果直接在主函数中编写测试函数体,它可以正常工作。那么,您认为造成这个问题的原因是什么?
分段错误:
#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 代码考试,并且有一个学生写了这个。是的,不是很好,但工作版本确实可以工作。
【问题讨论】:
-
x = teste();不应该是test吗?错字?此外,使用未分配或未分配的内存,然后想知道它为什么会出错? -
未定义的行为是未定义的
-
两个版本都没有 版本真正有效。指针
p指向哪里? -
我不需要“尝试”,因为未初始化的局部变量具有 indeterminate 值。如果这样的变量是一个指针,并且您取消引用它,您将拥有undefined behavior。如果你有 UB,那么这会让你整个程序格式错误并且无效。
-
嗯...如果您正在评估一些 C 代码考试,您不应该了解 undefined dbehaviour 吗?
标签: c segmentation-fault