【发布时间】:2015-08-06 12:14:43
【问题描述】:
为什么在这种情况下分配 0 大小的 char 块有效?但是如果我写char *string = NULL; 就不行了。
我正在使用 Visual Studio。
int main()
{
char *string = (char *)malloc(0);
string[0] = 'a';
string[1] = 'b';
string[2] = 'c';
string[3] = 'd';
string[4] = '\0';
printf("%s\n",string);
return 0;
}
【问题讨论】:
-
这不是“工作”;它充其量假装在工作。未定义的行为被称为“未定义”并且不是“保证崩溃”是有充分理由的。
-
您预计会发生什么,为什么?
-
这根本不是重复的。