为什么分配 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;
}
首先我要声明的是,根据man page of malloc()
The malloc()
函数分配 size 字节并返回指向已分配内存的指针。内存未初始化。如果大小为 0,则malloc()
返回NULL
,或稍后可以成功传递给的唯一指针值free()
.
像这样的电话malloc(0)
is valid本身,但是接下来,我们需要检查返回的指针的有效性。它可以
- Return
NULL
- 返回一个可以传递给的指针
free()
.
但无论如何,不允许取消引用该指针。它会导致内存访问越界并导致未定义的行为.
也就是说,有两件重要的事情要提,
Please 看看为什么不投射返回值malloc()
和家人在C
.
请检查返回值malloc()
在使用返回的指针之前。
所以,为了回答你的问题,
初始化字符串与(char *)malloc(0)
和空
不使用malloc(0)
在这种情况下,作为对指针的 NULL 检查may失败,给人留下错误的印象valid将内存分配给指针。总是使用NULL
用于初始化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)