c++ - 段错误(核心已转储)4

标签 c++ segmentation-fault

在我使用 Ctrl+D 停止我的程序输入后,我不断收到错误 Segmentation fault(core dumped)。我一直在谷歌搜索这个错误并试图找出是什么导致了它,但我似乎无法弄清楚。我已经尝试用谷歌搜索这个问题并查看了该网站上的其他问题/答案,但我仍然无法弄清楚为什么会出现错误。根据我的研究,我发现段错误是由于试图访问我无权访问的内存而引起的。我希望这是正确的。

我是 C++ 的新手,非常感谢你们能给我的任何帮助。

#include <iostream>
using namespace std;

#include "video.h"

int main() {

    const int MAX = 100;
    Video *video[MAX];  // up to 100 videos

    for(int l = 0; l < MAX; l++)
    {
        video[l] = NULL;
    }

    string title;
    string url;
    string desc;
    string sorting;
    float length;
    int rate;

    cout << "What sorting method would you like to use?" << endl;
    getline(cin, sorting);
    cout << "Enter the title, the URL, a comment, the length, and a rating for each video" << endl;

    while(getline(cin, title))
    {
        getline(cin, url);
        getline(cin, desc);
        cin >> length;
        cin >> rate;
        cin.ignore();
        for(int k=0; k < MAX; k++)
        {
            video[k] = new Video(title, url, desc, length, rate);
        }
    }


    video[MAX]->print();  // prints the new Video object

    delete[] video[MAX];

    return 0;
}

最佳答案

代码中的几个问题:

1) delete[] 的错误使用。

首先,delete[] 应该只用于删除动态分配的数组。你的不是。

其次,即使视频一个动态分配的数组,删除它的正确方法是

delete[] video;

在代码中删除视频的正确方法是遍历数组并删除每个视频:

for(int k=0; k < MAX; k++)
{
    delete video[k];
}

2) 数组最后一个元素的索引不正确。

video[MAX]->print();

应该是

video[MAX-1]->print();

第一个元素的索引为零,第二个元素的索引为 1...所以最后一个 (MAX) 元素的索引为 MAX-1。

3) 最后,虽然不是段错误的原因,但您可能不会在每次读取一行时都尝试用相同的视频填充整个数组。然而,这就是代码的作用:)

关于c++ - 段错误(核心已转储)4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35398662/

相关文章:

c++ - XWindow 不听自己的属性/窗口管理器

通过模板的 C++ 类说明符alignas 选项

python - graphviz分割错误

c++ - 将位数据输出到二进制文件C++

c++ - Boost Threads 生产者/消费者意外行为

c++ - (1<<32) 和 (1<<i) 之间的差异,其中 i == 32

c++ - 鸡尾酒排序代码段错误 - 不知道为什么

c - 代码未优化时的段错误——SQLite

c - 为二维数组分配内存时出现段错误

c++ - 作业 : Making an array using pointers