3

私の関数では、メモリを割り当て、messagePacket と呼ばれる構造体を埋めます

struct messagePacket *packet = malloc(sizeof(struct messagePacket));
//fill

ポインターを (uint8_t *) としてキャストしようとすると、gcc は次のような警告をスローします。

sendBuf(..., (uint8_t *)packet);

私は次のことをうまく行うことができました。このアプローチを回避策として使用できることを理解しています。私がここにいるのは、回避するよりも、これから学びたいからです。

uint8_t *buf = malloc(sizeof(struct messagePacket));

struct messagePacket のサイズ = 1209 B. 私の推測では、メモリのチャンクが非常に大きく、16 バイト アドレスなどの上位メモリ アドレスに格納されるのではないでしょうか? しかし、それは同じサイズの uint8_t * を malloc できるという事実には適合しません。

4

2 に答える 2

2

コンパイラは、構造体が 8 ビットよりも大きく、構造体uint8_tの最初のバイトのみをアドレス指定することに気付くと思います。(void *)これは意図されているように見えるので、 にキャストしてから にキャストできます(uint8_t *)。ただし、sendBuf にバッファ サイズを指定する必要がありsizeof(struct messagePacket)ます。

于 2012-04-26T07:43:59.723 に答える
0

警告は他の議論に関するものだと思います。その行の完全なコード、関数のプロトタイプ、sendBuf()問題の行の完全なコンパイラ警告を提供してください。

一般的な考え方として、sendBuf()関数は送信するデータにaconst void *ではなく aを使用する必要があります。const uint8_t *参照send()してください。

于 2012-04-26T07:38:56.013 に答える