通过指针在结构中设置字符串时发生C++错误

C++ error to set string in struct by pointer

本文关键字:C++ 错误 字符串 设置 指针 结构      更新时间:2023-10-16

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

struct movieNode
{
  string name;
};
int main()
{ 
    struct movieNode* newMovieNode = (struct movieNode*)malloc(sizeof(movieNode));
    newMovieNode->name = "123";
}

当运行此程序时,会显示以下消息:

"Trabalho.exe中0x5EDB11E2(msvcr110d.dll)处未处理的异常:0xC0000005:写入位置0xCDCDCDCD时发生访问冲突。"

有人能帮我解决这个问题吗?

非常感谢。

您为movieNode分配了内存,但没有构造它。请改用new。此外,在C++中,详细的类型说明符是不必要的。

movieNode* newMovieNode = new movieNode;

为了详细说明上面的答案,malloc()只保留了一个字节数,并返回一个指向第一个字节的指针,而不执行任何进一步的逻辑。虽然这对于只包含POD类型的哑结构来说是可以的,但更复杂的C++类在分配时依赖构造函数将它们初始化为良好状态。

关键字"new"分配内存并调用正在实例化的类型的构造函数。在这种情况下,它将调用编译器为movieNode结构生成的默认构造函数,进而调用所有成员变量的默认构造函数-从而按预期将"name"初始化为空字符串。

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