gpt4 book ai didi

c++ - 添加两个具有运算符重载的数组对象导致段错误

转载 作者:搜寻专家 更新时间:2023-10-31 01:26:16 25 4
gpt4 key购买 nike

我正在用 C++ 设置一个类,它将包含数组对象和一个将它们相加的函数(通过添加它们各自的组件)。这些对象中的每一个都有一个指向将被添加在一起的"new" float 组的指针。我相信,要么因为这些是指针或分配给"new"数组,当通过重载 + 运算符访问它们的组件时存在某种内存问题,但我不确定具体是什么问题。该文件编译没有任何问题,但在运行时只是说“Segmentation fault (core dumped)”。我也知道我应该在 for 循环中使用最小值而不是最大值,但现在我所有的数组大小都相同,所以我只是用这种方式进行测试。

如果我在 main() 中注释掉数组的实际添加,错误消息就会完全消失,但我不太清楚为什么。

#include  <iostream>

using namespace std;

class Array
{

private:
int size, location;
float value;

public:
float *arrayptr;

Array(int size)
{
arrayptr = new float[size];
}

void setValue(int location, float value)
{
arrayptr[location] = value;
}

Array operator+(Array a)
{
int max;

if (a.size >= size)
{
max = a.size;
}
else
{
max = size;
}

Array tmparray(max);

for(int i=0; i<max; i++)
{
tmparray.arrayptr[i] = a.arrayptr[i] + arrayptr[i];
}
return tmparray;
}

};

main()
{
Array a1(3);
a1.setValue(0, 1.0);
a1.setValue(1, 22.0);
a1.setValue(2, 12.2);

Array a2(3);
a2.setValue(0, 3.3);
a2.setValue(1, 44.5);
a2.setValue(2, 21.7);

Array tmp(3);
// Source of the error (parenthesis doesn't seem to affect it):
tmp = (a1 + a2);

}

最佳答案

您没有在构造函数中设置大小,因此当 if (a.size >= size) 发生时,您会得到未定义的行为。可能被设置为一些可笑的值,然后您离开阵列。

m_size = size 将成员大小值设置为传递给构造函数的大小值。

当数组大小不同时,+ 运算符也不会注意离开数组。

关于c++ - 添加两个具有运算符重载的数组对象导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55603618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com