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

Bhu*_*gav 1 malloc memory-management visual-c++

我收到了这个错误 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; 
Run Code Online (Sandbox Code Playgroud)

我的代码:

TrackedObj *obj ;
obj = malloc(sizeof *obj) ;       
Run Code Online (Sandbox Code Playgroud)

jxh*_*jxh 5

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

您可以添加演员:

obj = static_cast<TrackedObj *>(malloc(sizeof *obj)) ;       
Run Code Online (Sandbox Code Playgroud)

或者,new改为使用:

obj = new TrackedObj;
Run Code Online (Sandbox Code Playgroud)

确保使用delete释放分配的内存new.

如果您将源文件重命名为具有.c扩展名而不是.cpp,您的Visual C++编译器(我假设这基于C2440错误代码)应该将源代码编译为C,并且malloc不需要强制转换.