【发布时间】:2014-07-13 17:27:19
【问题描述】:
以下代码打印 1 到 300 之间的所有数字。 怎么不丢丢分段错误?
编译:gcc 版本 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
现在这也不同于malloc(0) actually works?
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
int *pi = (int *)malloc(1);
int i = 0;
for(i = 0;i < 300;i++) {
*(pi + i) = i + 1;
}
for (i=0;i < 300;i++) {
printf("%d\n", *(pi + i));
}
return 0;
}
【问题讨论】:
-
未定义行为的一种可能表现形式是程序执行您期望的操作。这些是最难纠正的 UB。
-
这很糟糕,你不应该这样做。只要你幸运,它只会按预期工作。
-
@MohitJain 我会说 不走运
-
我知道这很糟糕。我很好奇为什么它几乎总是有效。
-
不会,会导致内存损坏和无法解释的错误
标签: c gcc segmentation-fault malloc