【发布时间】:2014-03-01 01:49:49
【问题描述】:
这是我的代码。
int main()
{
char *s;
int i = 0;
printf("%lu \n", sizeof(s));
s = malloc(sizeof(char) * 2);
printf("%lu \n", sizeof(s));
/*Why is this working?*/
while (i <= 5)
{
s[i] = 'l';
i++;
}
printf("%s \n", s);
printf("%lu \n", sizeof(char));
printf("%lu \n", sizeof(s[0]));
}
在我看来,这应该是段错误,因为我试图写的比分配的多。为什么会这样?
【问题讨论】:
-
看似成功是未定义行为的一种有效形式
-
可能只是运气...
-
未定义行为不同于
segfault。谷歌“什么是段错误”,谷歌会很高兴地告诉你,这里的用例与“访问 CPU 无法物理寻址的内存”不同 -
为什么你期望它会给你一个错误?在大多数情况下,它会运行得很好(就像你的一样)。这取决于您在在哪里写作。
-
旁注:在打印
size_t类型的整数时使用%zu。