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通常表示未初始化的指针。向我们展示构造器,以及如何添加成分。释放内存永远不会(无论如何,在我能想到的任何情况下)修复分段错误;它只是防止内存泄漏。