C++ 更改数组中的对象,但不更改对象数-c++;

C++ 更改数组中的对象,但不更改对象数-c++;,c++,segmentation-fault,C++,Segmentation Fault,我在程序中的某个地方遇到了一个分段错误,我想它可能就在这段代码中成分是指向成分对象数组的指针。现在,重载的*操作符只是更改数组中的每个成分对象。因此,在我看来,我只是在改变指针指向的对象,但我没有改变数组的大小,也就是说,我没有试图向成分数组添加更多的对象。出于某种原因,我还需要释放内存吗 Recipe Recipe::operator*(const Fraction multiplier) { for (int count = 0; count < numIngredients;

我在程序中的某个地方遇到了一个分段错误,我想它可能就在这段代码中<代码>成分是指向
成分
对象数组的指针。现在,重载的*操作符只是更改数组中的每个成分对象。因此,在我看来,我只是在改变指针指向的对象,但我没有改变数组的大小,也就是说,我没有试图向
成分
数组添加更多的对象。出于某种原因,我还需要释放内存吗

Recipe Recipe::operator*(const Fraction multiplier)
{
    for (int count = 0; count < numIngredients; count++)
    {
        ingredients[count] * multiplier;
    }
    servings = multiplier;
    return *this;
}
配方::运算符*(常量分数乘数)
{
对于(int count=0;count
我看不出该代码中有任何东西必然会导致崩溃,但其他地方的问题可能会导致崩溃。例如,如果NumingElements成员不正确,或者配料指针为空。奇怪的是,运算符*被用于配料。通常,二进制运算符*将返回一个值,并且不会修改参数,但不会使用返回值。Component::operator*可以定义为以某种方式修改成分,这很不寻常。您可能需要提供更多代码才能使问题变得清晰。

检查
numingedints
的值。这可能是错误的。

首先,我要说几句话

您的
Recipe::operator*
在应该时不是
const
,并且会修改自身

这就像做:

a = 5
b = a * 2
并且在本节末尾有
a=10

这在概念上是错误的

您所做的是定义
Recipe::operator*=

您应该定义
Recipe::operator*=
Recipe::operator*
如下:

Recipe& Recipe::operator*=(const Fraction multiplier)
{
    for (int count = 0; count < numIngredients; count++)
    {
        ingredients[count] * multiplier;
    }
    servings = multiplier;
    return *this;
}

Recipe Recipe::operator*(const Fraction multiplier)
{
    Recipe x = *this;
    x *= multiplier;
    return x;
}
Recipe&Recipe::operator*=(常量分数乘数)
{
对于(int count=0;count

关于segfault,我们需要查看所有的代码来查看那里发生了什么。它可以在程序中的任何地方,但要查看的内容将是您的复制构造函数

请不要这样做。如果要修改目标对象,则应重载类似于
operator*=
的内容,以至少给出修改的合理警告。至于你关于解除分配的问题:我认为你告诉我们的还不足以做出合理的猜测做什么?不应该
成分[计数]*乘数导致无操作?Segfault通常表示未初始化的指针。向我们展示构造器,以及如何添加成分。释放内存永远不会(无论如何,在我能想到的任何情况下)修复分段错误;它只是防止内存泄漏。