C++将文件读入Char数组

use*_*343 4 c++ linux ubuntu gcc

我使用以下代码将文件读入chararcter数组.现在,对于小文件(比如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) ;
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 5

如果数组是局部变量,则会出现堆栈溢出,因为它不适合堆栈.而是在堆上分配"数组",直接使用new或间接使用std::vector.

或者使用内存映射.看mmap功能.

  • @peterph是的,内存映射是一件好事......虽然如果用C++编程然后使用包含在类中的东西并且[平台无关](http://stackoverflow.com/questions/8215823/platform- independent-memory-mapped-file-io)比POSIX mmap更令人满意.只是如果一个问题被标记为C++,那么我认为需要回击建议调用`new []`*(当然,还有malloc ......)的方法* (3认同)
  • @Richard正如我所说,使用`std :: vector`可能更可取.但是了解`ulimit`也没什么不对. (2认同)