首页 > 解决方案 > 在 C++ 中复制字符串“读取字符串字符时出错。”

问题描述

我正在实现一个堆栈,我想推送和弹出字符串数据。我可以不只是设置

字符串名称 = originalString ???

这是我要推动的:

void push(StackNode** top_ref, int nAttack, int nDefense, string nName, string nType) {
    StackNode* stackNode = (StackNode*)malloc(sizeof(StackNode));
    stackNode->attack = nAttack;
    stackNode->defense = nDefense;

    stackNode->name = nName; //not working
    stackNode->type = nType; //not working

    stackNode->next = NULL;
    stackNode->next = *top_ref;
    *top_ref = stackNode;
} 

其中stackNode->名称

并且 stackNode->type 已经定义为字符串

我不断收到:“读取字符串字符时出错。”

标签: c++stringcopy

解决方案


问题在于malloc对象不能很好地发挥作用。请参阅malloc 是否创建类的新实例?

malloc分配足够的空间来容纳 a StackNode,但不调用它的构造函数。它也不会创建基础成员对象,string包括您的 s。为此,您需要执行答案中描述的操作:

A* a = (A*)malloc(sizeof(A));
new (a) A();

a->~A();
free(a);

但在这一点上,你真的应该只是使用new。在 C++中使用的理由很少new(有时间和地点,但尽量减少)。能打电话的次数就更少了malloc

StackNode* stackNode = new StackNode;

这将适当地调用构造函数。完成后记得调用delete内存!


推荐阅读