Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;按指针设置结构中的字符串时出错_C++_String_Pointers_Struct - Fatal编程技术网

C++ C++;按指针设置结构中的字符串时出错

C++ C++;按指针设置结构中的字符串时出错,c++,string,pointers,struct,C++,String,Pointers,Struct,我在试图在结构中设置字符串时遇到问题,下面是我的代码: struct movieNode { string name; }; int main() { struct movieNode* newMovieNode = (struct movieNode*)malloc(sizeof(movieNode)); newMovieNode->name = "123"; } 运行此操作时,将显示以下消息: “Trabalho.exe中0x5EDB11E2(msvcr110

我在试图在结构中设置字符串时遇到问题,下面是我的代码:

struct movieNode
{
  string name;
};

int main()
{ 
    struct movieNode* newMovieNode = (struct movieNode*)malloc(sizeof(movieNode));
    newMovieNode->name = "123";
}
运行此操作时,将显示以下消息:

“Trabalho.exe中0x5EDB11E2(msvcr110d.dll)处的未处理异常:0xC0000005:访问冲突写入位置0xCDCDCD。”

有人能帮我修一下吗


非常感谢。

您为
movieNode
分配了内存,但您没有构建它。改用
new
。另外,C++中不需要详细的类型说明符。
movieNode* newMovieNode = new movieNode;

您为
movieNode
分配了内存,但没有构造它。改用
new
。另外,C++中不需要详细的类型说明符。
movieNode* newMovieNode = new movieNode;

为了详细说明上述答案,malloc()只保留一些字节,并返回指向第一个字节的指针,而不执行任何进一步的逻辑。虽然对于包含POD类型的哑结构来说,这是可以的,但是更复杂的C++类依赖构造函数将它们初始化为一个好的状态。 “new”关键字分配内存并调用实例化类型的构造函数。在本例中,它将调用由编译器为movieNode结构生成的默认构造函数,该构造函数将依次调用所有成员变量的默认构造函数,从而按预期将“name”初始化为空字符串


编辑:同样,您需要使用“delete”来释放内存,以确保调用相关的析构函数。

为了详细说明上述答案,malloc()只保留一些字节,并返回指向第一个字节的指针,而不执行任何进一步的逻辑。虽然对于包含POD类型的哑结构来说,这是可以的,但是更复杂的C++类依赖构造函数将它们初始化为一个好的状态。 “new”关键字分配内存并调用实例化类型的构造函数。在本例中,它将调用由编译器为movieNode结构生成的默认构造函数,该构造函数将依次调用所有成员变量的默认构造函数,从而按预期将“name”初始化为空字符串

编辑:同样,您需要使用“delete”来释放内存,以确保调用相关的析构函数