2013-04-01 135 views
2

在CodeBlocks中對此進行編碼,該程序不斷收到seg故障。誰能幫忙?程序不斷收到分段錯誤

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

編輯的數組:我評論刪除[ ] arr;它仍然seg故障:/

編輯2:好,所以如果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; 
} 
+1

'DynArray :: add'如何實現? – Naveen

+0

我的猜測是一個滑出界外的數組 –

+0

它在哪裏得到這個seg錯誤?另外,如果你不是,你需要遵循三/五的規則。 – chris

回答

0

在開始使用DynArray add()方法之前,您可能需要在HugeInt構造函數中初始化DynArray。你沒有在代碼中包含add方法,但是如果它符合我的想象,那麼在使用它之前可能沒有構建DynArray對象,因此會導致seg錯誤。

+0

如果沒有明確初始化,它將被默認初始化。我認爲沒關係。 –

+0

它將按原樣默認構建。 – chris

0

您發佈的代碼編譯並運行時沒有錯誤。

我可以推測問題發生在其他地方,因爲DynArray不符合rule of three

當前,如果以任何方式複製了DynArray,該副本將保持指向相同int *arr的相同指針。

並且當該副本被銷燬時,所有其他副本使用的數組也被銷燬。

+0

你能看看我上面的第二個編輯嗎?爲什麼它在沒有seg錯誤的情況下以這種方式工作,但是如果我試圖直接將字符串作爲seg錯誤的參數傳遞? – sanghas26

+0

@ user2230341如果您以任何方式獲取segfaults,我懷疑您的問題中的代碼不是您運行以獲取segfault的完整代碼。 –