問題タブ [brk]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
301 参照

c - brk() での Bash スクリプトのセグメンテーション違反

この「無限」ループのセグメンテーション違反がすぐに発生する理由を誰かが説明できますか? たとえば、次の関数があるとします。

この segfault は 8 ~ 10 秒後に発生します。strace で調べると、多くのbrk()呼び出しが見られます。

私の質問は次のとおりです。

  1. これは、(brk を介して) メモリ空間内のマップされていない領域にアクセスしようとしているため、セグメンテーション違反ですか?
  2. はいの場合、なぜアクセスしようとしているのですか?
  3. ここでは malloc() の方が良い選択でしょうか?
  4. これに関する追加/トリビア情報があれば、それをいただければ幸いです。
0 投票する
1 に答える
1358 参照

c - sbrk(0) を 2 回呼び出すと異なる値が返されるのはなぜですか?

機能を理解しようとしていsbrk()ます。

私が知っていることから:
sbrk(0)ブレークの現在のアドレスを返し、それをインクリメントしません。ブレークのアドレスをバイト単位
sbrk(size)でインクリメントし、ブレークの前のアドレスを返します。size

だから私はそれをテストするために何かを作成しました:

したがって、次のような結果が表示されることを期待しています。

しかし、代わりに私はこれを得ています:

sbrk(0)の最初の 2 つの呼び出しが同じ値を返さないのはなぜですか? ブレーク アドレスを変更する 2 つの呼び出しの間に何が起こるでしょうか。

EDIT: アドレスを変数に保存すると問題が解決します:

0 投票する
1 に答える
562 参照

c - 最初の sbrk の戻り値が後続の呼び出しと異なるのはなぜですか?

Cでメモリがどのように機能するかを理解しようとしているので、sbrk現在関数を試しています。sbrk(0)現在のプログラム ブレーク、つまりデータ セグメントの末尾を返す必要があることはわかっています。

そのため、複数回呼び出しを試みましたがsbrk(0)、何らかの理由で最初の値が他の値とは異なります。たとえば、このプログラム

次の出力を教えてください。

最初の値が他の 3 つの値と異なる理由がわかりません。何かアイデアはありますか?