:私はまだ非常にポインタを経験していないよリンクリストをトラバースするための一時ポインタを解放する必要がありますか?私のようなものがある場合
function(DLL *dll) {
DLL_Node *temp = dll->head
// do stuff with temp like traverse list with temp=temp->next
// say when done, temp = dll->tail, should I free(temp) or leave it alone?
}
を、私は余分なポインタを作成したように、それはそうですが、それは単に、リスト内の位置を指すので、私はいけませんそれを解放し、機能が終了するとクリアされますか?私はこのようなDLL
とDLL_Node
を定義しところで
:
typedef struct dll_node {
int data;
struct dll_node *prev;
struct dll_node *next;
} DLL_Node;
typedef struct DLL_ {
int count;
DLL_Node *head;
DLL_Node *tail;
} DLL;
私はメモリリークのテストのためのプログラムvalgrindのための勧告を見て、それは間違いなく可能性が失われ、間接的に失われ、両方の0バイトが、しかし言います失われた2,064バイトです。正確に意味するものか、それが適切かどうかは不明です。
私が考えていたことはありがたいことですが、私はあまりよく分かりませんでした。 valgrindによって表示される可能性のあるバイトが気になるものであれば、どうでしょうか? – Austin
@Jakeおそらくは、あなたのプログラムは、割り当てられたブロックのいくつかへのポインタを保持していないが、途中にポインタがあることを意味します。割り当てたブロックにポインタ演算を使用すると、valgrindは "おそらく失われた"警告を生成します。 – dasblinkenlight