2

これを 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:メインが次のようになっている場合、コードは機能します。誰でも理由を説明できますか?

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

2 に答える 2

0

投稿したコードはコンパイルされ、エラーなしで実行されます。

は 3 の規則をDynArray満たさないため、別の場所で問題が発生していると推測できます。

現在、 aDynArrayが何らかの方法でコピーされた場合、そのコピーは同じ への同じポインタを保持しますint *arr

そして、そのコピーが破棄されると、他のすべてのコピーで使用される配列も破棄されます。

于 2013-04-01T04:41:35.673 に答える