1 c++ pointers segmentation-fault dynamic-memory-allocation
功能是这样的:
Set::Set(Multinumber* tempArray[], int tempSize)
{
numElements = tempSize;
capacity = tempSize*2;
setArray = new Multinumber*[capacity];
for (int i=0; i<numElements; i++)
{
addElement(tempArray[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
变量setArray在我的标题中声明为Multinumber**类型
每当我用它调用它时会出现段错误:
Multinumber* carr[2];
carr[0]=c4;
carr[1]=c5;
Set setb(carr,2);
Run Code Online (Sandbox Code Playgroud)
c4和c5已经被声明为指向正确类型的对象的指针.
任何帮助将非常感激.
编辑:下面的代码是addElement函数(为缩进道歉)
const Set Set::operator+(const Set& rhs) const
{
Set result;
int i=0, j=0;
while ((i < numElements) && (j < rhs.numElements))
{
Multinumber* toadd=new Multinumber;
toadd=*(setArray[i]) + *(rhs.setArray[j]);
result.addElement(toadd);
i++;
j++;
}
while ((i < numElements))
{
result.addElement(setArray[i]);
i++;
}
while ((j < rhs.numElements))
{
result.addElement(rhs.setArray[j]);
j++;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
编辑:基于许多cout语句,错误似乎在这个函数中:
bool Set::isFull()
{
return (numElements == capacity);
}
Run Code Online (Sandbox Code Playgroud)
编辑:更改了数组索引,但仍然是段错误
数组使用从零开始的索引,因此设置carr[2]
为两长度数组中的任何内容都是未定义的行为.你应该感激这是一个段错误.:-)
尝试:
Multinumber* carr[2];
carr[0]=c4;
carr[1]=c5;
Set setb(carr,2);
Run Code Online (Sandbox Code Playgroud)
这应该照顾段错误.
carr[1]=c4;
carr[2]=c5;
Run Code Online (Sandbox Code Playgroud)
不应该这样
carr[0]=c4;
carr[1]=c5;
Run Code Online (Sandbox Code Playgroud)
?
建议:如果你在一个调试器中加载它,比如gdb,它就会识别出罪魁祸首,你会很快看到你的错误.