分段错误(Core Dumped)C ++初学者

时间:2016-02-22 05:19:48

标签: c++11 segmentation-fault core

所以,我是C ++的新手。我已经研究了分段错误(核心转储),内存分配和新/删除,尽管我无法理解这些概念。我相信我的问题在于内存分配,这就是为什么我认为“删除”会解决我的问题。愿有人请我朝正确的方向努力吗?

输入

#include <iostream>
#include <string>

using namespace std;

struct CandyBar
{
    string name;
    double weight;
    int calories;
} ;

int main()
{
    CandyBar* backpack = new CandyBar[3];
    backpack[0] = {"Choco Chalk", 5.1, 725};
    backpack[1] = {"Twisty String", 1.8, 300};
    backpack[2] = {"Gummy Nums", 4.4, 475};

    cout << "Name\t\tWeight\tCalories" << endl << endl;
    for (int x = 0; x < 4; x++)
    {
        cout << backpack[x].name << "\t" << backpack[x].weight << "\t" << backpack[x].calories << endl;
    }

    delete backpack;

    return 0;
}

输出

Name            Weight    Calories

Choco Chalk     5.1       725
Twisty String   1.8       300
Gummy Nums      4.4       475
(Segmentation fault) core dumped

1 个答案:

答案 0 :(得分:2)

我看到两个错误:

  • 您的循环for (x = 0; x < 4; x++)将遍历x值0,1,2,3。但是,由于您使用backpack分配了new Candybar[3]backpack指向只有足够的内存来容纳3 CandyBar s,即backpack[0], backpack[1], backpack[2]。按照目前的情况,在第四次通过时,您的循环将尝试访问backpack[3],这不在数组的末尾。

  • 当您使用new[]分配内存时(就像您分配了CandyBar数组一样),您必须使用{{1}取消分配内存},而不仅仅是普通的delete[]。请参阅delete vs delete[] operators in C++

当我将循环退出条件更改为delete并将您的释放更改为x < 3时,该程序为我工作。