使用Malloc C 时C2440错误
C2440 error when using malloc c++
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 - 方法更可读,new
和delete
比malloc
和free
更安全。
澄清示例:http://ideone.com/46twod
实际上: you 使用new
和delete
!
-
malloc()
返回void *
您必须将其投射到MSG *
您自己。
new
为您施放 -
malloc()
将字节视为一个参数,意思是
您必须计算字节count housel (num * sizeof(MSG)
)。
you 可能会误解字节数(例如sizeof(MSG)
vssizeof(MSG *)
)new
自动计算您的字节计数
建议
请勿在C 程序中使用malloc(),而是使用new
或更好的RAII技术。
如果您仍然被迫使用malloc()出于何种原因,则必须将malloc()返回的void*归还给接收变量指针类型,在您的情况下,可能是:
pmsg = (MSG*)malloc(cLinesMax * sizeof(MSG));
要删除错误,要么使用C编译器;或者,如果您想坚持使用C 编译器,则需要明确键入Malloc的返回值。
在这里解决了类似的问题:无法从'void *'转换为'node *'
- 如何在类模板的成员函数中正确调用函数对象?正在生成 Visual Studio 编译器错误 C2440
- 由于类型从 C 转换为 C++,无法编译错误 C2440
- 我不断收到错误 C2440'=':无法从"int *(__cdecl *)(int *,int *,int,int)"转换为"int *
- 编译方面的问题.错误E0413、E0434、C2664、C2440
- C++ 嵌套类模板 错误 C2440 '=':无法从'type'转换为'same type'
- 如何返回多维数组?错误C2440
- 常量转发引用给出错误 C2440:"正在初始化":无法从"常量标准::字符串"转换为"常量标准::字符串 &&"
- 尝试向 COM 对象添加另一个接口时出现静态强制转换错误 C2440
- 编译错误 C2440,并在 boost odeint 中使用make_dense_output
- 错误 C2440:无法将"系统::D rawing::位图"转换为"系统::对象"
- 错误 C2440:"正在初始化":无法从"初始值设定项列表"转换为"std::vector<char *,std::分配器<_Ty>>
- 错误 C2440:'initializing':无法从 'BaseMenu' 转换为 'BaseMenu *'
- 在C++中构造模板函数时出现编译错误 C2664 和 C2440
- 错误 C2440:"正在初始化":无法从"std::string"转换为"双 *[]"
- 错误 C2440:"返回":无法转换。适用于 vs140,141,但不适用于 vs142
- 使用Malloc C 时C2440错误
- 错误 C2440:"=":无法从 'char *(__cdecl *)(int,int)' 转换为 en 'GetItemText_t'
- c++ C2440 错误无法从"const BWAPI::UpgradeType"转换为"const BWAPI::Type *"
- 在 Visual Studio 10 中使用类型转换运算符重载时出现 C2440 错误
- C++ C2440 错误,无法从 'std::_String_iterator<_Elem,_Traits,_Alloc>' 转换为 'LPCTSTR'