内存分配错误 - malloc:无法将void *转换为结构指针

时间:2013-06-19 02:55:50

标签: visual-c++ memory-management malloc

我收到此错误error C2440: '=' : cannot convert from 'void *' to 'TrackedObj *'

我的TrackedObj结构如下所示:

typedef struct {
    IplImage* hsv;    
    IplImage* hue;    
    IplImage* mask;   
    IplImage* prob;    
    CvHistogram* hist; 
    CvRect prev_rect;  
    CvBox2D curr_box;  
} TrackedObj; 

我的代码:

TrackedObj *obj ;
obj = malloc(sizeof *obj) ;       

4 个答案:

答案 0 :(得分:5)

您正在使用C ++编译器进行编译,该编译器不允许在没有强制转换的情况下将void *转换为其他类型。

您可以添加演员:

obj = static_cast<TrackedObj *>(malloc(sizeof *obj)) ;       

或者,改为使用new

obj = new TrackedObj;

请务必使用delete释放分配了new的内存。

如果您将源文件重命名为.c扩展名而不是.cpp,则Visual C ++编译器(我假设基于C2440错误代码)应该编译源代码作为C,不需要malloc的演员。

答案 1 :(得分:1)

C允许从void*到其他指针类型的隐式转换。 C ++没有。

决定您要使用的语言。对于C,请确保您的编译器知道您的代码是C.对于C ++,要么添加强制转换,要么使用new(后者更可取)。

答案 2 :(得分:0)

obj = (TrackedObj *)malloc(sizeof *obj) ;  

答案 3 :(得分:0)

obj = static_cast<TrackedObj *>(malloc(sizeof *obj)) ;  

这对我有用。