生徒のコードが割り当てによって暴走し、テスト マシンが停止するのを防ごうとしています。私はもう試した
setrlimit(RLIMIT_DATA, r);
wherer
は制限を保持する構造体です。残念ながら、この制限は停止brk
しsbrk
て割り当てられなくなりますが、C ライブラリはフェールオーバーしmmap
て割り当てを続行します。
私も試してみました
setrlimit(RLIMIT_AS, r)
から返されENOMEM
た値に遭遇したときにコードが呼び出すためのスタック領域がないため、プロセスがエラーから回復することは不可能です。NULL
malloc()
バイナリに対する制御は限られているため、システム コールを使用できる場合は、それを希望します。しかし、プロセスの回復能力を損なうことなく割り当てを制限する手段が必要です。誰にも提案はありますか?
更新: failmallocと呼ばれるものを見つけましたが、あまり洗練されていません。これで失敗する可能性はありますが、gdb が診断できない segfault が常に発生します。
さらに更新:少なくともいくつかのケースでは、それが私が望む仕事をしているように見えることがsetrlimit(RLIMIT_AS, r)
わかりました.後で発生していたセグメンテーション違反は、無関係なモジュールの障害によって引き起こされました. 誰かが何か面白いこと (または質問を残す理由) を思いつかない限り、おそらく質問を削除します。