私のプログラムは C で書かれており、gcc でコンパイルしています。ファイルを読み込んで、ファイルの内容をバッファに保存しています。そのためには、バッファーをファイルと同じ大きさにする必要があります。私は malloc() を使用してバッファにメモリを割り当てています。残念ながら、277MB のファイルに出くわしました。それはヒープには多すぎますか?実行時にセグ フォールトが発生しますが、それ以上の情報はありません。160 MB もの大きなファイルでも機能しますが、277 MB ファイルのこの 1 つの外れ値がそれを破っています。
編集:valgrindは私に与えます
@ 0xC0000022L valgrind がくれた
==6380== Warning: set address range perms: large range [0x8851028, 0x190e6102) (undefined)
==6380== Warning: set address range perms: large range [0x8851028, 0x190e6028) (defined)
==6380== Warning: set address range perms: large range [0x190e7028, 0x2997c108) (undefined)
==6380== Warning: set address range perms: large range [0x190e7028, 0x2997c028) (defined)
==6380== Warning: silly arg (-1737565464) to malloc()
==6380== Invalid write of size 4
==6380== at 0x8048A49: main (newanalyze.c:85)
==6380== Address 0x4a00 is not stack'd, malloc'd or (recently) free'd
==6380==
==6380==
==6380== Process terminating with default action of signal 11 (SIGSEGV)
==6380== Access not within mapped region at address 0x4A00
==6380== at 0x8048A49: main (newanalyze.c:85)
しかし、85 行目は、ファイルのサイズの影響を受けない小さな変数です。