メモリリーク


42のプロジェクトを実行している場合は、メモリ管理が無視できません.メモリ管理については、42のソウルショッピングモールで広く議論されている.この文章はカーターたちの考えに基づいて整理された文章だ.

メモリ漏洩の正確な理解


私一人だけがやったとは知らなかったが、最初の42のカードプロジェクトの進行中、メモリ漏れは記録後に解除されないことを理解した.しかし,実験を行った場合,単純に乾燥後に値を添加しても水漏れは起こらなかった.


「ドレイン数」とは、アドレス値を有する変数が「未記録のアドレス値」に置き換えられた場合に、「ドレイン数」は、失われたアドレス値を意味する。


簡単に言えば、以下のように他の値を直接追加すると、水漏れが発生します.どうしたんですか.aはbのスタックメモリにアドレス値があるため、以前のレコードはhipメモリのアドレス値を孤立的に保持する.


exit()を使うとメモリが管理されるのではないでしょうか。


その結果、メモリが解放されます.しかし、水漏れは処理できません.だからexit関数を使っても水漏れはできません最初にコードを設計するときは、コードが漏れないようにしてください.メモリの割り当てと漏洩はまったく異なる概念です.
例を挙げてみましょう.カルテルなら、まずよく水が漏れているft splitを見に来ました.

うーん、以前やったことがあるので、単独で整理していないのでコードが乱れています.ここでは2番目の語録(a[i 2]=(char*)malloc~~)の部分です.このコードの下で、mallockが失敗した場合、単独で処理しますよね?どうしてこれを作るのですか.
ft splitという関数を使用すると、どのような問題が発生するかを理解する必要があります.
char	**d;
char	b[5] = "a b c";

ft_split(b, ' ') = d;
さあ.単純なスペースに基づく2 D配列のプログラムを作成したとします.中間のエコーに失敗し(上図の2番目のエコーでは)、return 0と仮定した.

では、前に記録した残りのメモリはどうなりますか?


元のchar**aは返される値です.アドレス値を持つ**aを返し、dに入るのが正常です.リターンに失敗して直接0を返すと、アドレス値を含むchar**aを外部に戻すことはできません.ft splitのマロックアドレスは誰も見つけられません.水漏れが発生するのでフリーを先にして0に戻ります

の最後の部分


メモリ管理は非常に重要です.だから評価する時は厳格に管理しなければならない.しかし、exitの前にメモリ漏洩があるかどうかを決定し、概念を理解してこそ、より42のディレクトリになることができます.