我的数据结构上的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];