我的数据结构上的c ++内存泄漏

时间:2014-04-14 20:42:27

标签: c++

所以我毕业于学习C并且现在正在学习C ++。据我所知,C和C ++在各种方面都相似,所以我试图将过去的C项目文件重新编写成C ++。但是,当我尝试打印出我的信息时,我不断收到内存泄漏。有人能告诉我为什么我的代码中会出现内存泄漏。

struct.h

typedef struct student_info {
    char last[10];
    char first[10];
    int student_id;
    int count_student;
} student;

typedef struct course_info {
    char name[10];
    int course_id;
    int count_course;
    student *students;
} course;

typedef struct gradebook_info {
    course *courses;
} gradebook;

function.c

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;
    }
}
  • 当我运行new_course()功能时,它可以正常工作。
  • 我运行我的printCourse()功能。
  • 我运行new_student()功能。
  • 当我运行printStudent()功能时,它可以正常工作。
  • 然后我尝试再次运行printCourse()函数,当i=2时,我从结构学生那里得到一些信息。

我无法弄明白。任何帮助表示赞赏。

的main.c

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);

2 个答案:

答案 0 :(得分:0)

您不仅要为gradebook分配内存,还要为coursesstudents分配内存。例如:

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个。

P.S。:如果您没有为coursesstudents分配内存,那么您的代码可能会进行一到两次迭代。但在这种情况下,你搞砸了你的记忆。

答案 1 :(得分:0)

您需要使用students分配指针coursenew

获得循环后:

students = new student_info* [loop]

courses= new course_info* [loop]