我的数据结构上的C++内存泄漏 所以我已经从C学习到现在学习C++。从我理解的C和C++的方式不同,所以我尝试把我过去的C项目文件改写成C++。然而,当我试图打印出我的信息时,我不断地得到内存泄漏。有人能告诉我为什么我的代码会出现内存泄漏吗 结构h 功能c
你不仅要为成绩册分配内存,还要为课程和学生分配内存。例如:我的数据结构上的C++内存泄漏 所以我已经从C学习到现在学习C++。从我理解的C和C++的方式不同,所以我尝试把我过去的C项目文件改写成C++。然而,当我试图打印出我的信息时,我不断地得到内存泄漏。有人能告诉我为什么我的代码会出现内存泄漏吗 结构h 功能c,c++,C++,你不仅要为成绩册分配内存,还要为课程和学生分配内存。例如: gradebook *info = new gradebook; info->courses = new course_info[10]; for(int i = 0; i < 10; i++) info->courses[i]->students = new student_info[10]; 注意,此示例将课程数和每门课程的学生数限制为10人 附言:如果你不为课程和学生分配内存,你的代码可能会运行一
gradebook *info = new gradebook;
info->courses = new course_info[10];
for(int i = 0; i < 10; i++)
info->courses[i]->students = new student_info[10];
注意,此示例将课程数和每门课程的学生数限制为10人
附言:如果你不为课程和学生分配内存,你的代码可能会运行一到两次迭代。但是在这种情况下,你会把你的记忆搞砸。你需要分配给学生和课程使用新的指针 获取循环后: 学生=新学生信息*[循环] 及
courses=newcourses\u info*[loop]您得到了什么信息?请发布您的主要功能,以便我们了解如何为您的课程分配内存gradebook@user2816227我认为您使用的术语内存泄漏不正确。内存泄漏是分配内存的结果,如通过C++中的新C++或MalOC,而不需要正确的分配调用删除,当不再需要内存或…曾经由于缺少代码中的任何分配,泄漏是不可能的。将C重写为C++涉及的不仅仅是为CUT交换PRTFF。你需要把这些结构转换成C++的类,然后开始使用更高级的数据结构,比如STL容器。如果你想去C++的路线,那么GooDoad不应该有一个课程*,但是STD::向量,课程应该有一个学生*,但是一个STD::向量,而学生名字不应该是char(10),而是STD::String。
void new_course(gradebook *info) {
int i, loop=0;
cout << "Enter Number of Courses " ;
cin >> loop;
for(i=0; i<loop; i++) {
cout << "Enter Course ID ";
cin >> info->courses[info->courses->count_course].course_id;
cout << "Enter Course Name ";
cin >> info->courses[info->courses->count_course].name;
info->courses->count_course++;
}
}
void new_student(gradebook *info) {
int i, loop=0;
cout << "Enter Number of Students " ;
cin >> loop;
for(i=0; i<loop; i++) {
cout << "Enter Student ID ";
cin >> info->courses->students[info->courses->students->count_student].student_id;
cout << "Enter Last Name ";
cin >> info->courses->students[info->courses->students->count_student].last;
cout << "Enter First Name ";
cin >> info->courses->students[info->courses->students->count_student].first;
info->courses->students->count_student++;
}
}
void printCourse(gradebook *info) {
int i;
cout << "Course ID\tCourse Name\t" << endl;
for(i=0; i<info->courses->count_course; i++) {
cout << info->courses[i].course_id << "\t\t";
cout << info->courses[i].name << endl;
}
}
void printStudent(gradebook *info) {
int i;
cout << "Student ID\tLast Name\tFirst Name\t" << endl;
for(i=0; i<info->courses->students->count_student; i++) {
cout << info->courses->students[i].student_id << "\t\t";
cout << info->courses->students[i].last << "\t\t";
cout << info->courses->students[i].first << endl;
}
}
gradebook *info = new gradebook; //allocate memory
do {
main_menu();
int option=0;
switch(option) {
case 1: new_course(info);
break;
case 2: new_student(info);
break;
case 3: printCourse(info);
break;
case 4: printStudent(info);
break;
}
}while(option < 13);
delete(info);
gradebook *info = new gradebook;
info->courses = new course_info[10];
for(int i = 0; i < 10; i++)
info->courses[i]->students = new student_info[10];