函数是这样的:

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]);
 }
}

setArray变量在我的 header 中声明为Multinumber **类型

每当我这样称呼它时,它都会出现段错误:
Multinumber* carr[2];
carr[0]=c4;
carr[1]=c5;
Set setb(carr,2);

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;
}

编辑:
基于大量的cout语句,此函数似乎存在错误:
 bool Set::isFull()
 {
  return (numElements == capacity);
 }

编辑:更改数组索引,但仍存在段错误

最佳答案

carr[1]=c4;
carr[2]=c5;

那不是吗
carr[0]=c4;
carr[1]=c5;



一条建议:如果将其加载到调试器(例如gdb)中,它将识别出罪魁祸首,并且您会很快看到错误。

关于c++ - 为什么此功能存在段错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4326199/

10-11 22:23
查看更多