簡體   English   中英

C ++簡單指針錯誤無法弄清楚為什么?

[英]C++ Simple Pointer mistake can't figure out why?

我正在嘗試設計一個StudentReviewSystem,它只包含課程,學生等。現在,我正在嘗試將課程對象添加到課程數組中。 因為,我正在動態地做; 當我插入一個新課程時,我將olders復制到新數組並插入新數組。 但是,當我刪除舊的數組時,它會給我無效的指針錯誤。 我想不通為什么? 感謝幫助。

void StudentReviewSystem::addCourse(int courseId, string courseName) {
    //increment number of courses
    setNumCourses(numCourses + 1);
    Course* newCourses = new Course[numCourses];

    if (courses != NULL) {
        // copy courses to new one
        for (int i = 0; i < numCourses - 1; i++) {
            newCourses[i].setCourseId(courses[i].getCourseId());
            newCourses[i].setCourseName(courses[i].getCourseName());
        }

        // delete old courses
        delete courses;
    }

    newCourses[numCourses - 1].setCourseId(courseId);
    newCourses[numCourses - 1].setCourseName(courseName);
    courses = newCourses;
}

這是課程課程。

#include "Course.h"
Course::Course() {
}

Course::~Course() {
}

int Course::getCourseId() const {
    return courseId;
}

void Course::setCourseId(int courseId2) {
    courseId = courseId2;
}

string Course::getCourseName() const {
    return courseName;
}

void Course::setCourseName(string courseName2) {
    courseName = string(courseName2);
}

這是主要的。

int main() {
    StudentReviewSystem srs;

    srs.addCourse(111, "foo");

    srs.addCourse(222, "foo");

    srs.addCourse(333, "foo");

    srs.addCourse(444, "foo");

    return 0;
}

我想你忘了點: delete [] courses; 實際上刪除了數組 - 你只是刪除了指針。

這不是您的問題的答案,但我想告訴您可以使用標准庫執行此操作。 一種方法是std :: map,一種是std :: vector。

我建議一張地圖:

#include <map>
#include <string>
std::map<int, string> courses;

要添加課程:

courses[111] = "foo";

課程數量:

courses.size();

或者你可以使用std :: vector代替。

#include <vector>
std::vector<Course> courses;

加上:

courses.push_back(Course(111, "foo"));

課程數量與地圖相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM