2016-02-05 84 views
-5

我有一个宏正在读取带有348804849行的txt文件。我创建了一个结构来存储包含在文件每一列中的信息以及我添加的几个变量。我遇到的问题是我的电脑内存不足以存储所有这些信息。所以,我试图分配内存,但运行我的代码时出现错误。这些是代码的相关部分。我已经简化名称C++分配内存数组struct struc

在.C

ifstream myfile ("file.txt"); 
    char str[LINE_BUFFER]; 

if (myfile.is_open()){ 

    cout << "Theoretical file has been opened succesfully" << endl; 

    while (myfile && myfile.getline(str, LINE_BUFFER)){ 

     myfile >> info[i].thing1 >> info[i].thing2;  
     i++; 

     } 

    lines_number = i-1; 
     myfile.close(); 

}else cout << "Unable to open file"; 

info = malloc(lines_number * sizeof *info); 

,并在.H

struct info_t{ 
    double thing1; 
    double thing2; 
}; 

info_t *info; 

错误:

终止扔“的std :: runtime_error的一个实例后调用' what():>>>解释器编译错误: 无法分配节内存!

+2

您不能在* .c *文件中包含'ifstream',也不能''cout'。在[tag:C++]中使用'malloc()'并不总是一个好主意,请记住类有构造函数,并且需要运算符'new'。因为这是[tag:C++],所以使用'std :: vector'并避免'malloc()'或'new'。 –

+0

另外,如果你有一个新的(或很差的malloc),你必须删除(或免费的malloc) – Garf365

+3

你真的需要一次读取内存中的整个文件吗?您可能需要阅读 - 例如 - 每行1000行,处理它们并继续下一个1000行,直到结束。 – AkiRoss

回答

3

目前您正在读取数组,,然后创建/分配它。这是倒退。

理想情况下,您最好在解析每行时阅读它。而不是储存所有五千兆字节。