我有一个方法,当给定命令时,删除存储在向量中的对象的所有指针。这些指针都是使用new
命令在堆上创建的。这就是我的方法所要解决的问题,并且我遇到了细分错误11错误。
else if (command == "Clear") {
size_t allGrades = grades.size();
for (size_t i = 0; i < allGrades; ++i) {
grades[0] = nullptr;
delete grades[0];
}
}
其中grades
是已在堆上分配的指针的向量。我该如何解决?
答案 0 :(得分:2)
text_file = open('training.txt', 'r')
file = text_file.readlines()
s = []
for line in file:
s.append(re.findall(r'\!*\.*\d+', line))
print(s)
必须
The Da Vinci Code book is just awesome 1
this was the first clive cussler i've ever read, but even books like Relic, and Da Vinci code were more plausible than this 1
i liked the Da Vinci Code a lot 1
da vinci code was an awesome movie 1
mission impossible 2 rocks 1
否则,您将不会删除保存在 grades[0] = nullptr;
delete grades[0];
中的元素(在删除之前设置为0,并且您始终会查看成绩中的第一个元素),因此会造成内存泄漏
{编辑添加} “这些指针都是使用新命令在堆上创建的”:使用 new 分配的内存不能进入堆栈
答案 1 :(得分:1)
解决此问题的简单方法是不拥有原始指针。您很有可能*不需要new
成绩对象,然后将指针存储在向量中。
将std::vector<Grade *>
更改为std::vector<Grade>
,您的代码段将变为
else if (command == "Clear") {
grades.clear();
}
*如果确实需要动态分配Grade
对象,则应使用std::vector<std::unique_ptr<Grade>>
,并使用std::make_unique
而非new
来构造它们。清算与有价交易无异。