在这种情况下,malloc做了什么?

brn*_*nby 4 c parsing

这行C代码有什么作用?

      be_node *ret = malloc(sizeof(*ret));
Run Code Online (Sandbox Code Playgroud)

be_node的定义可以在这个文件中找到:http://funzix.git.sourceforge.net/git/gitweb.cgi?p = funzix/funzix; a = blob_plain; f = bencode/bencode.h; hb = HEAD

上面的代码行在此文件中找到:http://funzix.git.sourceforge.net/git/gitweb.cgi?p = funzix/funzix; a = blob_plain; f = bencode/bencode.c; hb = HEAD

我不明白sizeof(*ret)如果刚刚被宣布会返回什么?

Oli*_*rth 11

它与任何其他用途没有什么不同sizeof; 它将评估其操作数的大小. sizeof是基于编译时信息,1因此ret只是刚刚声明的无关紧要.

这个成语是首选的使用方式malloc.如果您要使用be_node *ret = malloc(sizeof(be_node)),请考虑如果您ret在以后更改类型会发生什么.如果您忘记更换" be_node"的两种用法,那么您将介绍一个微妙的错误.


1.除了可变长度数组的情况.