0

この設計の選択について健全性チェックを依頼する。

文字列または数値のノードタイプを受け入れることができるヒープデータ構造を作成することにより、Cでヒープソートを記述しています。(私はソートできる独自のプライベートヒープを作成しています)

ヒープ内のノードはvoid*であり、比較操作を実行するために参照が解除されます。Heap構造体は、各ノードのサイズをHeap.nodesizeに格納します。ノードが文字列の場合は、-1を格納します。

ノードが挿入されると、void*にメモリが割り当てられます。Heap.nodesizeが-1の場合、strlen(val)はmallocに渡されます。それ以外の場合、Heap.nodesizeはmallocに渡されます。

比較を実行する場合、Heap.nodesizeが-1の場合はstrcmpが使用され、それ以外の場合はブール演算子が数値に使用されます。

ヒープが解放されたら、ループして各void*を解放する予定です。この時点で、ノードごとに解放するバイト数が解放されますか?

4

2 に答える 2

3

malloc元のサイズを知る必要はありません。malloc()に返されたポインタを渡すだけですfree()

ssize_t size = 400;
void* p = malloc(size);
// Do whatever with p
free(p);
于 2012-11-18T00:42:51.650 に答える
0

freeバイト数を知る必要はありません。'Jonathon Reinhart' が言ったように使用してください。TCPL の第 8 章に and の簡単な実装がありますmalloc。それを読むだけで、自分のサイズを知らなくてもどのように機能するかがわかります。動的に割り当てられたメモリ。うまくいくことを願っています!freefree

于 2012-11-18T02:52:21.243 に答える