2014-10-27 49 views
2

我想從一個文件讀取一個double值的數組。我有128^3個值。我的程序工作得很好,只要我停留在128^2的值,但現在我得到一個「分段錯誤」的錯誤,儘管128 ^3≈2,100,000遠低於int的最大值。那麼你可以將多少個值放入一個雙精度數組中?可以在C++中將數組放入多少個值?

#include <iostream> 
#include <fstream> 
int LENGTH = 128; 

int main(int argc, const char * argv[]) { 
    // insert code here... 
    const int arrLength = LENGTH*LENGTH*LENGTH; 
    std::string filename = "density.dat"; 
    std::cout << "opening file" << std::endl; 
    std::ifstream infile(filename.c_str()); 
    std::cout << "creating array with length " << arrLength << std::endl; 
    double* densdata[arrLength]; 


    std::cout << "Array created"<< std::endl; 
    for(int i=0; i < arrLength; ++i){ 
     double a; 

     infile >> a; 
     densdata[i] = &a; 
     std::cout << "read value: " << a << " at line " << (i+1) << std::endl; 
    } 
    return 0; 
} 
+0

儘可能多的它。你實際要問的是,堆棧有多大。 – Deduplicator 2014-10-27 16:15:43

+1

取決於您的構建分配多少堆棧空間。 – 2014-10-27 16:15:54

+2

堆棧大小有限,1mb是典型值。當您需要存儲大量元素時,請使用動態內存。特別是我建議使用矢量和push_back。此外,在每次循環迭代後,存儲在densdata中的指針都將變爲無效。 – 2014-10-27 16:16:40

回答

9

您正在堆棧上分配數組,並且堆棧大小有限(默認情況下,堆棧限制通常爲單位數兆字節)。

您有幾種選擇:

  • 增加堆棧(在Unix ulimit -s)的大小;
  • 使用new分配堆上的數組;
  • 轉到使用std::vector
+0

對於這個問題,最後兩個選項是相同的。 – 2014-10-27 17:47:12