gpt4 book ai didi

c++ - 段。在 std::vector 上推送指针时出错

转载 作者:行者123 更新时间:2023-11-30 01:57:29 25 4
gpt4 key购买 nike

我已经使用 Valgrind 分析了以下代码并得到了以下信息:

使用大小为 8 的未初始化值
大小为 8 的无效读取

执行此行时:

compuMethod->keywordlist->push_back(keyword);

不过,我明明已经初始化了keyword...

#include <iostream>
#include <vector>
#include <map>
#include <string>
using namespace std;

class Keyword;
class CompuMethod;

typedef std::vector<Keyword*> KeywordList;
std::map<std::string, CompuMethod*> AllCompuMethods;

class Keyword
{
private:
std::string _name;

public:
Keyword(std::string name) : _name(name) {}
virtual ~Keyword() {}
std::string GetName() { return(_name); }
};

class CompuMethod
{
public:
CompuMethod(){}
~CompuMethod(){}
KeywordList* keywordlist;

};

int main()
{
CompuMethod* compuMethod = new CompuMethod();
Keyword* keyword = new Keyword("terminal");
compuMethod->keywordlist->push_back(keyword);

//Call delete for each new
return 0;
}

我显然忽略了一些东西。我在这条线上做什么:

关键字* keyword = new Keyword("terminal");

这不是在初始化关键字吗?

最佳答案

keywordlist是指向 std::vector<Keyword*> 的指针

您不能简单地将项目插入其中。

使用下面的方法为构造函数中指向 vector 的指针分配内存

CompuMethod(){keywordlist = new KeywordList();}

并相应地更新析构函数

~CompuMethod(){ delete keywordlist; }

编辑:

灰色淡化评论-

但是不要忘记复制/移动 ctor 和 operator= 来正确处理指针。否则,您将以双重释放告终

关于c++ - 段。在 std::vector 上推送指针时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18664741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com