我的结构如下:
typedef struct
{
std::wstring DevAgentVersion;
std::wstring SerialNumber;
} DeviceInfo;
但是,当我尝试使用它时,会遇到各种各样的内存分配错误。
如果我尝试将其传递给这样的函数:
GetDeviceInfo(DeviceInfo *info);
我将收到一个运行时检查错误,抱怨我在使用它之前未对其进行初始化,而该问题似乎已得到解决:
DeviceInfo *info = (DeviceInfo*)malloc(sizeof(DeviceInfo));
但是然后,在该函数中,当我尝试设置任一结构字符串时,它抱怨在尝试为字符串设置值时试图访问错误的指针。
初始化此结构(及其所有内部字符串)的最佳方法是什么?
最佳答案
您应该使用new
而不是malloc
,以确保构造函数被DeviceInfo
及其包含的wstring
调用。
DeviceInfo *info = new DeviceInfo;
通常,最好避免在C++中使用
malloc
。同样,在使用完指针后,请确保
delete
指针。编辑:当然,如果您只需要本地范围内的
info
,则不应在堆上分配它。只需这样做:DeviceInfo info; // constructed on the stack
GetDeviceInfo( &info ); // pass the address of the info