【发布时间】:2012-11-08 09:18:44
【问题描述】:
我正在使用以下代码将文件读入字符数组。现在,对于小文件(比如 2 MB),它可以正常执行,但对于大文件(140 MB),在我的 18 GB UBUNTU 服务器中,它会给出segmentation fault。谁能帮我解决这个问题?我认为 18 GB 足以将 240 MB 文件保存到内存中。我正在使用 64 位 UBUNTU 并使用 g++ 进行编译。
ifstream is;
char chararray [fileSize] ;
is.read(chararray, fileSize) ;
【问题讨论】:
-
@milleniumbug:我认为
fileSize类似于size_t,其值为240*1024*1024... -
@hmjd:嗯,他说没有。
-
将第二行代码替换为
char* chararray = new char[fileSize];。 -
@Abbondanza 无需为此引入原始数组指针,这是一个 C 型解决方案。它们 (a) 容易泄漏并且 (b) 提供了忘记
delete[]而不是delete的机会。向量更好……从 C++11 开始,您甚至可以从函数中返回大的向量,而无需支付复制它的成本,这要归功于 return value optimization 期间发生的复制省略。 -
@Abbondanza ...不要忘记异常安全!向量——作为一个带有析构函数的类——可以自行清理。原始指针只会泄漏! :-/