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”来释放内存,以确保调用相关的析构函数