Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编程原理与实践第27章指示性清单错误? 我正在阅读编程:Bjarne Stroustrup用C++编写的原理和实践,我来到第27章,遇到了一些可疑的东西。这是一行代码: struct List* lst = (List*)malloc(sizeof(struct List*));_C++_Pointers_Malloc - Fatal编程技术网

编程原理与实践第27章指示性清单错误? 我正在阅读编程:Bjarne Stroustrup用C++编写的原理和实践,我来到第27章,遇到了一些可疑的东西。这是一行代码: struct List* lst = (List*)malloc(sizeof(struct List*));

编程原理与实践第27章指示性清单错误? 我正在阅读编程:Bjarne Stroustrup用C++编写的原理和实践,我来到第27章,遇到了一些可疑的东西。这是一行代码: struct List* lst = (List*)malloc(sizeof(struct List*));,c++,pointers,malloc,C++,Pointers,Malloc,我的问题是,这不应该写为: struct List* lst = (List*)malloc(sizeof(struct List)); 当我用第一个版本编译程序时,它工作得很好,但我看到malloc被用作第二个版本 所以我的问题是,哪个版本是正确的,有什么区别 PS:本书是关于C++的,但本章试图提出一种在C.写作的方法,所以这实际上是一个C程序。 < P>经验法则:当处于混乱状态时,检查数据类型。 在您的例子中,lst是一个指针,它指向类型为struct List的变量。因此,保存结构列

我的问题是,这不应该写为:

struct List* lst = (List*)malloc(sizeof(struct List));
当我用第一个版本编译程序时,它工作得很好,但我看到malloc被用作第二个版本

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


PS:本书是关于C++的,但本章试图提出一种在C.写作的方法,所以这实际上是一个C程序。

< P>经验法则:当处于混乱状态时,检查数据类型。 在您的例子中,
lst
是一个指针,它指向类型为
struct List
的变量。因此,保存
结构列表所需的内存位置将是
sizeof(struct List)
。因此,第二个版本是有意义的

附言:祝贺你,你认为正确:)

它还显示,
List
也被定义为
typedef
,否则转换是语法错误


注:


如果将该代码作为C代码段,则

至于惯用C++,也不正确。因为MALLC不调用构造函数,所以C++的发明人会编写(基本上)C代码,C代码也可能出错。也许他写的程序,给出了坏的东西,C的例子,并对比它应该如何写在C++中?对于我们来说,没有这本书或者没有现成的书是不难知道的,因为没有上下文,只有两行代码可能有任何意义。@Someprogrammerdude不是在这种情况下,第一行是完全错误的?我是不是遗漏了一些太明显的东西?@SouravGhosh从语义上说,这肯定是错误的,但这实际上取决于结构的大小、内容和可能的构造函数。如果
sizeof(List)
恰好与
sizeof(List*)
相同(虽然不太可能),并且它是POD类型,那么它可以正常工作。@Someprogrammerdude同意,但可能性很小。另外,第一个即使有效,也显示出缺乏理解-->编程糟糕,唐;对不起,但是在C++的情况下,你使用的是MalCube(),我猜你需要的是演员。malloc返回一个void*。在C语言中,演员阵容是隐式的。耶,很抱歉混淆了。你完全正确。