找不到我的内存泄漏
问题描述:
2个问题:找不到我的内存泄漏
- 我的valgrind运行该程序的损失了大约400个字节,但我不知道我做错了什么。
- 由于某种原因,在学生对象(
roster[i]
int i = 0
)的FIRST(也是唯一的第一个)初始化时,该循环只允许我将两个参数传递给我的构造函数。我知道这听起来很奇怪,但第一次循环调用与其他循环不同。
HEADER
#include<iostream>
#include<string>
using namespace std;
class Student{
public:
Student();
Student(string ln, string fn, string cn) {setLast(ln);setFirst(fn);setCourse(cn);}
void showInfo(){cout << firstname << " " << lastname << " in " << coursename << endl;}
protected:
void setLast (string l){lastname = l;}
void setFirst (string f){firstname = f;}
void setCourse (string c){coursename = c;}
string firstname;
string lastname;
string coursename;
};
主要
int main(){
Student **roster;
int num;
cout << "how many?";
cin >> num;
roster = new Student*[num];
string l,f,c;
for (int i = 0; i < num; i++){
cout << "\nenter last, first, course: ";
getline(cin, l);
getline(cin, f);
getline(cin, c);
roster[i] = new Student(l, f, c);
roster[i]->showInfo();
}
delete [] roster;
};
答
的问题是,你是newing一个数组,你newing所有学生在数组中。你犯了一个new Student*[]
和一些new Student
,但只有delete[] arr
你,你忘了delete x
修复之前,我想建议你使用矢量和的unique_ptr,这将对防止所有的错误摆在首位:
std::vector<std::unique_ptr<Student>> roster;
int num;
cout << "how many?";
cin >> num;
roster.reserve(num);
std::string l,f,c;
for (int i = 0; i < num; i++){
cout << "\nenter last, first, course: ";
getline(cin, l);
getline(cin, f);
getline(cin, c);
roster.emplace_back(std::make_unique<Student>(l, f, c));
roster.back()->showInfo();
}
现在,您的代码的解决方案。你应该把它写在代码末尾:
for (int i = 0; i < num; i++){
delete roster[i];
}
delete [] roster;
+0
ahhhh我是一个白痴非常感谢 –
对于'roster [i] = new Student(l,f,c);'对于每个'i'都没有相应的'delete'。 – DeiDei
请不要使用C++,好像它是用有趣的新语法的C语言。使用'std :: vector>名册;',以及'roster.emplace_back(std :: make_unique (l,f,c));'你还应该测试你对'getline'的调用成功了。 –
paddy
@ n.m。这完全与问题无关。 –