4

ObjC クラスのインターフェースでこれらを定義しています。

unsigned m_howMany;
unsigned char * m_howManyEach;
...

その後、コードの後半で私はこれを持っています:

 m_howManyEach = malloc(sizeof(unsigned) * m_howMany);

ここで、「malloc の結果は unsigned char 型のポインターに変換されます。これは sizeof オペランド型 unsigned int と互換性がありません」という警告が表示されます。

誰かmalloc()がこの状況での適切な使用法と、警告を取り除く方法を説明してもらえますか?

4

3 に答える 3

4

ここにあなたの問題があります:

sizeof(unsigned)

コンパイラは「unsigned」を「unsigned int」と解釈するため、「unsigned char」を次のように指定する必要があります。

m_howManyEach = malloc(sizeof(unsigned char) * m_howMany);
于 2012-08-28T17:31:00.470 に答える
4

まず、unsigned本当にunsigned intです。

コンパイラはあなたに親切で、N個のunsignedのアイテムを割り当てていることを伝えていますunsigned char

また、その後のアクセスも間違っています。

変化する

unsigned char * m_howManyEach;

unsigned * m_howManyEach;

unsigned intの代わりにあなたのタイプとして本当に欲しいように見えるからですunsigtned char

もちろん、これは、1 バイトの符号なし文字ではなく、符号なし整数が本当に必要であることを前提としています。

整数値の実際のサイズが重要な場合は、サイズの値 (uint8_t、uint16_t、uint32_t、uint64_t) を考慮する必要があります。

于 2012-08-28T17:32:35.237 に答える
2

unsigned int1 つではなくサイズに基づいて配列のサイズを変更しているのは奇妙ですunsigned char

m_howManyEach = malloc(sizeof(unsigned char) * m_howMany);
于 2012-08-28T17:32:11.323 に答える