0

特定のタイプにメモリを割り当て、データのサイズと渡したデータのサイズを格納する必要があるプログラムを作成しています。したがって、8バイトを割り当てる場合、メモリのサイズを最初の4バイトに格納し、残りのサイズを残りの4バイトに格納する必要があります。これはヘッダーを持っていると言われていると思いますが、私はまだCにかなり慣れていません。現在私が持っているのは割り当てられたスペースだけですが、その中に値を格納するにはどうすればよいですか?

int * mem_start_ptr; //pointer to start off memory block
    int data; 
    data = &mem_start_ptr; 
    mem_start_ptr = (long *)malloc(sizeof(long)); //reserver 8 bytes
4

1 に答える 1

0

まず第一に、sizof(long)実装固有であり、64 ビット Linux では 8 バイトですが、Windows と 32 ビット Linux では 4 バイトです。malloc(8)明示的に 8 バイトを割り当てたい場合に使用します。ただし、 を保存したいのでint、 を使用するようmalloc(sizeof(*mem_start_ptr))です。また、 の戻り値をキャストしないでくださいmalloc。C では冗長であり、バグを隠すことさえできます。次に、これら 2 つの 4 バイト値を格納するには、次のようにします。

/* for the first one. Let's use 42 */
*mem_start_ptr = 42;
/* for the second one. Let's put the value of of some variable here */
*(mem_start_ptr + 1) = int_variable;

ポインター演算について読む必要があります。また、おそらく配列についても。Google はあなたの友達です。また、あなたのコードのこの部分が何のためにあるのかわかりません。それはあなたがおそらく期待することをしないので

int data;
data = &mem_start_ptr

最後に、あなたのコードを次のように書き直します。

int *mem_start_ptr;
mem_start_ptr = malloc(sizeof(*mem_start_ptr));
*mem_start_ptr = your_1st_4bytes;
*(mem_start_ptr + 1) = your_2nd_4bytes;

free()不要になったら忘れずに。また、ここでは撮影しませんでしたが、失敗した場合はそれを返すためNULL、を確認することも忘れないでください。malloc()

もう一度 - ポインター演算について読んでください。Google はあなたの友達です ;]

于 2013-02-04T23:23:46.913 に答える