编程原则与实践第27章入侵列表错误?

时间:2017-02-27 13:03:57

标签: c++ pointers malloc

我正在阅读编程:Bjarne Stroustrup使用C ++进行原理和练习,我到了第27章,遇到了一些可疑的东西。正是这行代码:

struct List* lst = (List*)malloc(sizeof(struct List*));

我的问题是,不应该写成:

struct List* lst = (List*)malloc(sizeof(struct List));

当我使用第一个版本编译程序时,它工作正常,但我已经看到malloc被用作第二个版本。

所以我的问题是,哪个版本是正确的,有什么区别?

PS:这本书是关于C ++的,但本章试图用C语言来表达。所以这实际上是一个C程序。

1 个答案:

答案 0 :(得分:1)

经验法则:遇到困惑时,请检查数据类型。

在您的情况下,lst是一个指针,指向类型为struct List的变量。因此,保留struct List所需的内存位置为sizeof(struct List)。所以,第二个版本是有道理的。

P.S。:恭喜,您认为正确:)

同样,List也被定义为typedef,否则强制转换是语法错误。

注:

如果要将此代码作为C片段,please see this discussion on why or why not to cast the return value of malloc() and family in C.