使用Malloc C 时C2440错误

C2440 error when using malloc c++

本文关键字:C2440 错误 Malloc 使用      更新时间:2023-10-16

i正在尝试" keyview1.c- charles petzold,1998"的代码,但我遇到了代码的这一部分的错误:

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

错误是:

错误1错误C2440:'=':无法从'void *'转换为 'pmsg'd: win32 项目 win32project8 win32project8 win32project8.cpp 97 1 win32project8

有人可以帮助我解决这个问题吗?

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

不使用C 中的malloc()为什么?为什么?

代码示例:
如果您仍然想使用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

实际上: you 使用newdelete

少了错误
  1. malloc()返回void *
    必须将其投射到MSG * 您自己
    new为您施放
  2. malloc()将字节视为一个参数,意思是
    必须计算字节count housel num * sizeof(MSG))。
    you 可能会误解字节数(例如sizeof(MSG) vs sizeof(MSG *)new自动计算您的字节计数

建议
请勿在C 程序中使用malloc(),而是使用new或更好的RAII技术。

如果您仍然被迫使用malloc()出于何种原因,则必须将malloc()返回的void*归还给接收变量指针类型,在您的情况下,可能是:

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

要删除错误,要么使用C编译器;或者,如果您想坚持使用C 编译器,则需要明确键入Malloc的返回值。

在这里解决了类似的问题:无法从'void *'转换为'node *'

相关文章: