繁体   English   中英

分段故障(核心已转储)4

[英]Segmentation fault (core dumped) 4

使用Ctrl + D停止程序输入后,我不断收到错误Segmentation Fault(core dumped)。 我一直在搜索该错误并试图找出导致该错误的原因,但我似乎无法找出原因。 我曾尝试使用Google搜索该问题,并浏览了该网站上的其他问题/答案,但仍然无法弄清楚为什么会出现此错误。 从我的研究中,我发现分段错误错误是由于尝试访问我无权访问的内存而引起的。 我希望这是对的。

我对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)最后,虽然不是造成分段错误的原因,但您可能并不想每次读取一行时都用相同的视频填充整个数组。 但是,这就是代码的作用:)

除了Danra已经指出的delete的错误用法之外,您的数组

Video *video[MAX];

没有元素

video[MAX];

最后一个元素是

video[MAX-1];

因为C ++从0开始计数(就像您在for循环中正确执行的一样)。 所以

video[MAX]->print(); 

将失败。

delete[] video[MAX];

尝试数组删除超出视频结尾的元素。

您的意思是:

delete video[MAX - 1];

否则你不是

delete[] video;

同样,您可能需要查看

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

这会尝试打印第MAX + 1个视频,而不是最后一个视频或整个视频列表。

您还应该查看以下循环:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM