c++ - 在 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 已经定义为字符串
我不断收到:“读取字符串字符时出错。”
解决方案
问题在于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
内存!
推荐阅读
- java - (Android / Java)如果类没有活动,如何将上下文作为参数?
- jquery - 如何在 data-date 中按日期对 div 进行排序
- solidity - Solidity中映射的映射
- javascript - 我可以在不弹出的情况下更改 create-react-app 中公用文件夹的名称吗?
- azure-active-directory - Azure AD B2C Graph Api - 如何获取所有组的用户
- sql - 结合 TG_TABLE_NAME 和 now() SQL 的简单触发器
- c# - 如何在 C# 中生成包含另一个模型的模型的 JSON 模式
- ios - 在 UITableView 和自定义单元格之间传递数据并存储它
- phylogeny - 在多少个内核上运行矩阵算法?
- jquery - CSS 变量不适用于多个 SVG 渐变