我的结构如下:

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

10-08 11:29