关于malloc()函数在windows编程中遇到的问题
《windows程序设计》第六章P217页的"KEYVIEW1"程序后,我发现它有一个小错误。
我原封不动的把随书光盘上的"KEYVIEW1"程序复制到硬盘中开始编译时,VC++出现错误提示:
--------------------Configuration: keyview1 - Win32 Debug--------------------
Compiling...
keyview1.cpp
E:\Myfiles\CPP\keyview1\keyview1.cpp(112) : error C2440: '=' : cannot convert from 'void *' to 'struct tagMSG *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
Error executing cl.exe.
keyview1.obj - 1 error(s), 0 warning(s)
出错的语句是112行:
pmsg = malloc (cLinesMax * sizeof (MSG)) ;
猜出来的意思是:不能把"void *"类型的指针转换成"struct tagMSG *"类型的指针。
原来malllc()函数在内存中分配空间后返回的指针是"void *"型,直接将这个"void *"类型的指针赋给pmsg是不正确的,必须要经过强制类型转换。
将112行稍作一下修改:
pmsg = (PMSG)malloc (cLinesMax * sizeof (MSG)) ;
结果就正确了。
谢谢这位仁兄: sunshine的资料信息