分段错误(转储核心)C ++初学者

沃齐奥

因此,我是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
内特·艾德雷奇(Nate Eldredge)

我看到两个错误:

  • 您的循环for (x = 0; x < 4; x++)将遍历x值0、1、2、3。但是,由于分配backpacknew Candybar[3],所以backpack仅指向足以容纳3 CandyBars的内存,即backpack[0], backpack[1], backpack[2]就目前而言,您的循环将在第四次尝试访问access backpack[3],而该访问不在数组末尾。

  • 当您分配内存new[](像你一样,因为你分配的数组CandyBar),你有释放它delete[],不只是简单的delete请参阅C ++中的delete vs delete []运算符

当我将您的循环退出条件更改为,x < 3并且将您的释放条件更改为时delete[] backpack;,该程序对我来说有效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章