C++ 为什么这个函数会出现故障?
其功能是:C++ 为什么这个函数会出现故障?,c++,pointers,segmentation-fault,dynamic-memory-allocation,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]); } } c4和c5已经声明为指向适当类型对象的指针 任何帮助都将不
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]);
}
}
c4和c5已经声明为指向适当类型对象的指针
任何帮助都将不胜感激
编辑:下面的代码是addElement函数(对缩进表示歉意)
编辑:更改了数组索引,但仍然存在错误
carr[1]=c4;
carr[2]=c5;
难道不是吗
carr[0]=c4;
carr[1]=c5;
?
一条建议:如果你在一个调试器中加载它,比如gdb,它会识别出错误行,你会很快看到你的错误
难道不是吗
carr[0]=c4;
carr[1]=c5;
?
一条建议:如果你在一个调试器(比如gdb)中加载它,它会识别出错误行,你会很快看到错误。数组使用零基索引,因此将
carr[2]
设置为两个长度数组中的任何内容都是未定义的行为。你应该庆幸这是一个错误。:-)
尝试:
这应该考虑segfault。数组使用基于零的索引,因此将
carr[2]
设置为两个长度数组中的任何内容都是未定义的行为。你应该庆幸这是一个错误。:-)
尝试:
这应该可以解决segfault。实际上,还是segfaultunfortunately@Ross你能在gdb或其他调试器中启动代码,看看它告诉你什么吗?另外,addElement()的代码可能会有所帮助-我看不出还有其他错误。添加了addElement函数。不幸的是,我现在没有调试器,也没有在这台计算机上安装调试器的权限。我很确定addelement确实可以工作,因为我在程序中的另一个地方使用过它,但它没有segfault。实际上,添加cout语句似乎表示它在addelement(params)上确实存在segfault,添加了另一个代码示例。库茨说,不可能在其他任何地方出现断层。实际上,还是断层unfortunately@Ross你能在gdb或其他调试器中启动代码,看看它告诉你什么吗?另外,addElement()的代码可能会有所帮助-我看不出还有其他错误。添加了addElement函数。不幸的是,我现在没有调试器,也没有在这台计算机上安装调试器的权限。我很确定addelement确实可以工作,因为我在程序中的另一个地方使用过它,但它没有segfault。实际上,添加cout语句似乎表示它在addelement(params)上确实存在segfault,添加了另一个代码示例。couts说,segfault不可能出现在其他任何地方。需要更多的上下文。一个完整的、可编译的示例将是极好的。您仍然没有提供addElement的代码。可能出现错误的地方还有默认构造函数、复制构造函数和类集合的析构函数,所以最好也发布这些代码。需要更多的上下文。一个完整的、可编译的示例将是极好的。您仍然没有提供addElement的代码。可能出现错误的地方还有类集合的默认构造函数、复制构造函数和析构函数,所以最好也发布这些代码。然后需要更多的上下文。请提供相关类的定义…然后需要更多上下文。请提供有关类的定义。。。
carr[1]=c4;
carr[2]=c5;
carr[0]=c4;
carr[1]=c5;
Multinumber* carr[2];
carr[0]=c4;
carr[1]=c5;
Set setb(carr,2);