gpt4 book ai didi

c++ - 使用 malloc C++ 时出现 C2440 错误

转载 作者:行者123 更新时间:2023-11-30 01:40:53 25 4
gpt4 key购买 nike

我在 visual studio 中尝试“KEYVIEW1.C − Charles Petzold, 1998”的代码,但我遇到了这部分代码的错误:

pmsg =(void*) malloc(cLinesMax * sizeof (MSG));

错误是:

Error 1 error C2440: '=' : cannot convert from 'void *' to 'PMSG' d:\win32 projects\win32project8\win32project8\win32project8.cpp 97 1 Win32Project8

谁能帮我解决这个问题?

最佳答案

错误是由(void *)malloc(..)引起的。
malloc() 不知道您的变量类型 (MSG *),因此它返回一个无类型指针 (void *)。
现在您想将 MSG * 设置为 void *,这就是错误发生的地方。
MSG *void * 显然不是同一类型。

不要在 c++ 中使用 malloc(): Why? , Why?

代码示例:
如果您仍想使用 malloc(),方法如下:

MSG *pmsg = (MSG *)malloc(cLinesMax * sizeof(MSG)); // Allocate Memory
... pmsg[0].member = "blub"; // Do stuff with pmsg
free( pmsg ); // Delete dynamic allocated memory

如果你想使用 c++ 方式,方法如下:

MSG *pmsg = new MSG[cLinesMax]; // Allocate an Array of MSG's with size $cLinesMax
... pmsg[0].member = "blub"; // Do stuff with pmsg
delete[] pmsg; // Delete dynamic allocated memory

在我看来,c++ 方式更具可读性,newdeletemallocfree 更安全>.

澄清示例:http://ideone.com/46twoD

事实上:使用newdelete 时犯的错误更少!

  1. malloc() 返回 void *
    必须将其转换为MSG * 您自己
    new 为你转换
  2. malloc() 将字节数作为参数,这意味着
    必须自己计算字节数(num * sizeof(MSG))。
    可能会错误计算字节数(例如 sizeof(MSG)sizeof(MSG *))new 自动为你计算字节数

关于c++ - 使用 malloc C++ 时出现 C2440 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42436526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com