在阅读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

08-16 13:54