首页 > 解决方案 > 比较 c 字符串和 c++ 字符串会产生分段错误吗?

问题描述

仅当类电影名称列表(此类别中的所有电影)中不存在 Movie.name 时,我才尝试将电影对象添加到电影中,我的代码是

void Movies::add_movie(char name[], unsigned short rating, unsigned short watched_times)
{
        for (size_t counter{0}; counter <= (names_list.size() -1 ); ++counter)
        {
            if (names_list[counter] == name)    // Name is converted to c++ string
                cout << "Movie already exists " << endl;
            else {
                auto *x = new Movie{name, watched_times, rating};
                included_movies.push_back(x);
                cout << "Added movie " << name << " Successfully" << endl;
                names_list.emplace_back(name);
            }
        }
}

类定义是

class Movies {
private:
    char categery[20]{};
    vector <Movie*> included_movies;
    vector <string> names_list;

public:
    void list_movies();
    explicit Movies(char[]);
    ~Movies();
    void add_movie(char name[], unsigned short rating, unsigned short watched_times);
};

但每次运行

comedy.add_movie("Alice in wonder land", 5, 1);

给了我一个分段错误,那么到底是什么问题。错误源于 if 语句(进行比较的语句)所以为什么。

编辑

有人注意到我正在从 size_t 中减去,所以这当然是不允许的,所以我尝试修复它并使用 do-while 循环,但仍然存在错误,新代码是但也没有区别,并且 if 语句执行中仍然存在错误

void Movies::add_movie(char name[], unsigned short rating, unsigned short watched_times)
{
        size_t counter{};
        do{
            if (names_list[counter] == name)    // Name is converted to c++ string
                cout << "Movie already exists " << endl;
            else {
                auto *x = new Movie{name, watched_times, rating};
                included_movies.push_back(x);
                cout << "Added movie " << name << " Successfully" << endl;
                names_list.emplace_back(name);
            }
            counter++;
        }while(counter <= names_list.size());
}

标签: c++segmentation-fault

解决方案


推荐阅读