这是我的代码.
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]));
}
Run Code Online (Sandbox Code Playgroud)
在我看来,这应该是段错误,因为我试图写的比我分配的更多.这为什么有效?
在我看来,这应该是段错误,因为我试图写的比我分配的更多.这为什么有效?
它不是"有效"; 您的代码调用未定义的行为."未定义的行为"并不意味着"您的代码会出现段错误".这将是定义的行为.UB意味着任何事情都会发生.
在这种情况下,你正在踩踏你不拥有的记忆.这有时会出现段错误,但不要指望它.C没有来自您的操作系统的"段错误"概念.