0

ここで私の仕事に問題があります。空きメモリのグローバル ブロックを作成し、malloc する必要があります。型キャストと処理エラーのため、初期化に問題があります。

最初の配列が実際には最初の要素へのポインターである C の配列と同様に、メモリ ブロックは、ポインター演算を使用してメモリ ブロックを検索できる場合と同様である必要があります。

//global variable
static byte *memory = NULL;

void allocator_init(u_int32_t size){

     *memory = (byte*) malloc(size);
}

これらのメモリ アドレスへのアドレス/ポインタは、構造体/リンクを介してメモリ ブロックのヘッダーとして格納されます。

typedef struct _header {
    int signiture;
    int size;
    header* next;
    header* prev;
} header;
4

4 に答える 4

5

ドロップ*:

*memory = (byte*) malloc(size);
^

キャストをやめたいと思うかもしれませんが、それはあなた次第です。

于 2012-08-17T13:32:06.887 に答える
1

*memory = (byte*) malloc(size);- このステートメントは、ヒープ メモリ ブロックのアドレスを値として に割り当てようとしていることを意味します*memory。ここmemoryには がNULLあるので、クラッシュします。

次のように変数にアドレスを割り当てる必要があります。memory = (byte*) malloc(size);

于 2012-08-17T13:35:16.307 に答える
1

malloc の戻り値を、ポインターが指すバイトではなく、ポインター自体に割り当てる必要があります。(とにかく、最初の NULL ポインターを逆参照すると、プログラムは segfault を起こします。)

memory = malloc(size);

また、malloc の戻り値を無視しないでください。

于 2012-08-17T13:33:27.370 に答える
0

ヘッダー構造体では、構造体がそれ自体を参照するため、内部ヘッダー ポインターを "struct _header * name;" として宣言します。私は他の人が他のすべてのポイントを打ったと思います:)

于 2012-08-17T16:27:48.180 に答える