在阅读K&R(第二版第6.5节)时,我遇到了以下功能:
struct tnode *talloc(void)
{
return (struct tnode *) malloc( sizeof(struct tnode) );
}
函数分配一些空间来存储struct tnode。我只想通过问自己是否能做到以下几点来检验我的理解:
struct tnode *talloc(void)
{
struct tnode s;
return &s;
}
最佳答案
答案是不。
struct tnode *talloc(void)
{
return (strcut tnode *) malloc( sizeof(strcut tnode) );
}
malloc
分配可在以后使用的空间,通常在heap上分配空间。当您不再需要分配给malloc
的空间时,需要手动释放空间,否则会导致内存泄漏。此指针可在函数返回后使用。在下面的例子中
strcut tnode *talloc(void)
{
struct tnode s;
return &s;
}
该结构在stack上分配,当函数退出时自动释放。因此,返回的指针将变成一个不能使用的悬挂指针(在函数外部)。在作用域之外使用作用域对象是undefined behavior。