程序不断得到分割错误

Program keeps getting segmentation fault

本文关键字:分割 错误 程序      更新时间:2023-10-16

在CodeBlocks中编写此代码,此程序不断获得段错误。有人能帮忙吗?

#include <string>
#include <iostream>
#include <sstream>
#include "include/hugeint.h"
using namespace std;
int main(int argc, char *argv[])
{
    HugeInt h("123");
    return 0;
}

我的HugeInt类(相关的),存储非常大的整数作为整数数组

class HugeInt
{
public:
    HugeInt(string);
private:
    DynArray dyn;
    //HugeInt& reverse();
    int size;
};
HugeInt::HugeInt(string input)
{
    string digits = input;
    for(unsigned int i = 0; i < digits.length(); i++){
        dyn.add(digits.at(i) - 48);
    }
    size = dyn.size();
}

动态数组类的整数

class DynArray
{
public:
    DynArray();
    ~DynArray();
private:
    int length;
    int *arr;   //points to this array
    int nextIndex;
};
DynArray::DynArray() {
    arr = new int[10];
    for (int i = 0; i < 10; i++)
        arr[i] = 0;
    length = 10;
    nextIndex = 0; }
DynArray::~DynArray()
{
    delete [] arr;
}
int DynArray::size(){
    return nextIndex;
}
void DynArray::add(int val) {
     int *newArr;
     if (nextIndex == length) {
         length = length + 10;
         newArr = new int[length];
         for (int i = 0; i < nextIndex; i++)
            newArr[i] = arr[i];
         for (int j = nextIndex; j < length; j++)
            newArr[j] = 0;
         delete [] arr;
         arr = newArr;
     }
     arr[nextIndex++] = val;
}

编辑:我注释了delete [] arr;出来了,它仍然存在错误:/

Edit2:如果main如下,那么代码可以工作。有人能解释一下原因吗?

#include <string>
#include <iostream>
#include <sstream>
#include "include/hugeint.h"
using namespace std;
int main(int argc, char *argv[])
{
    string in = "1234";
    HugeInt h(in);
    return 0;
}

在开始使用DynArray add()方法之前,您可能需要在HugeInt构造函数中初始化DynArray。您没有在代码中包含add方法,但是如果它做了我想象的事情,那么您可能在使用它之前没有构造DynArray对象,因此出现了seg错误。

您发布的代码编译和运行没有错误。

我可以推测问题发生在其他地方,因为DynArray不满足三法则。

当前,如果以任何方式复制DynArray,该副本将保留指向相同int *arr的相同指针。

当该副本被销毁时,所有其他副本所使用的数组也将被销毁。