C++で、あるバイナリファイルを読み込み、内容を変更して別のバイナリファイルへ出力するプログラムを作っています。
しかしファイルを書き出す際に、"File Size Limit Exceeded (Core Dumped)" というエラーメッセージが出てきてしまいます。(読み込みは問題なし)
入出力ファイルのサイズは、どちらも259MB程度です。
エラーメッセージなどで調べてみましたが原因・解決方法が分からず困っています。
アドバイスをいただけないでしょうか?
環境
OS: ubuntu 12.04 LTS (64bit)
コンパイラ: g++ 5.4.1
該当のソースコード
ファイル出力部分のコードです。
どうも fwrite のラインでエラーが起きているようです。
念のため sizeof(EvalParameters) を標準出力で確認して見たのですが、およそ259MBとなっていました。
c++
1void WriteParametersToBinary(const char* file_name){ 2 std::FILE* fp = std::fopen(file_name, "wb"); 3 if (fp == nullptr) { 4 std::printf("Failed to open %s.\n", file_name); 5 return; 6 } 7 8 //test 9 //cout << "Size of EvalParameters: " << sizeof(EvalParameters) << endl; 10 11 std::fwrite( params.get(), sizeof(EvalParameters), 1, fp); 12 std::fclose(fp); 13}
2019/5/12 追記
今更なのですが、クラスを含んだ構造体を fwrite 関数で読み書きするのは、大丈夫なのでしょうか?
EvalParametersは構造体なのですが、メンバに自作クラスを含んでいます。
それがエラーの原因になっている可能性はありますか?
(fread による読み込みでは、正しく値を読み込めていました。また下にある通り、macOSでは読み書き共にエラーは起こりませんでした。)
試したこと
- OSのファイルサイズ上限に引っかかっているのかと思い、ulimitコマンドで確認して見た所、以下のような設定になっていました。
> ulimit -Sa core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 127716 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 127716 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
> ulimit -Ha core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 127716 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 4096 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) unlimited cpu time (seconds, -t) unlimited max user processes (-u) 127716 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
(OSについてはあまり詳しくないのですが、この file size の数字が、プログラムの扱えるファイルサイズ上限を決めているということで良いのでしょうか?)
- 同じプログラムを macOS (ver. 10.13.2 , 64bit), 上でコンパイル・実行したところ、特にエラーもなく実行できました。
以上です。
足りない情報、試すべき事がありましたら教えていただけますと幸いです。
よろしくお願いします。

回答3件
あなたの回答
tips
プレビュー