【发布时间】:2020-06-29 03:49:20
【问题描述】:
我正在实现一个堆栈,我想推送和弹出字符串数据。我可以不只是设置
字符串名称 = 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的学术课程吗?如果没有,我可以给你介绍new[]吗?等你习惯了,我可以给你介绍std::stack吗? en.cppreference.com/w/cpp/container/stack -
你能告诉
StackNode类吗? -
Yepp new 让它工作,虽然我不太清楚为什么它与 malloc 如此不同。谢谢您的帮助!我为未来的人替换了 malloc StackNode* stackNode = new StackNode;
-
malloc是愚蠢的,只会给你这么多的内存。构造函数没有被调用。使用new,构造函数被调用。这就是区别。 -
但要明确一点 - 这是针对需要您自己进行内存管理的学术练习?因为 C++ 最佳实践是在适当的时候使用 STL 容器。在这里,您将使用
std::stack。