2013-02-09 54 views
0

我正試圖修復當我運行一個C++程序時發生的Segmentation Fault錯誤,這是由於我調用的結構太大造成的。我正在尋找一種方法來使用我的預先存在的C++結構並將其從堆棧移到堆中。由於C++結構中的大型二維數組造成的分段錯誤

我的代碼如下所示:

n = 300; 

struct arrayStruct { 
    double arr[n][n]; 
}; 

int main(int argc, char *argv[]){ 

    arrayStruct temperature; 
    // do a bunch of stuff including passing and receiving the arrayStruct within a few functions 
return 0 

} 

我一直在使用malloc和新的嘗試,但似乎只拿到我不知道如何解決這些錯誤。我已經嘗試在結構以及主文件中,但似乎無法得到它的工作。

在此先感謝

+0

我不能讓它適用於結構。如果我正在看一個簡單的2D數組,它只在函數中定義,那我會很好。我遇到的問題是將其轉換爲結構中的二維數組。 – jeremy 2013-02-09 03:50:12

+0

只需在堆上分配'arrayStruct'的一個實例:'std :: unique_ptr temperature(new arrayStruct());' – 2013-02-09 04:01:39

回答

0

嘗試使用矢量創建二維數組:

#include <vector> 

struct arrayStruct { 
    arrayStruct() 
    : arr(n, std::vector<double>(n)) 
    { 
    } 
    std::vector<std::vector<double>> arr; 
}; 
0

您可以在堆中分配的arrayStruct一個實例:

std::unique_ptr<arrayStruct> temperature(new arrayStruct()); 
+0

好的,所以這個實現的問題在於它似乎沒有啓動arr。我得到錯誤:錯誤:從'std :: unique_ptr >'轉換爲非標量類型'arrayStruct'請求 – jeremy 2013-02-09 04:33:11