0

malloc を使用して配列を動的に割り当てようとしています。私がそれを使用した後、私は1つの要素の配列だけになります。コードは次のとおりです。

uint8_t *arraystuffs;
uint16_t update_size;
//at somepoint, update_size get set to 2448

arraystuffs = (uint8_t *) malloc(update_size);

次に、必要だと思うものを配列に割り当てようとします。デバッガーを見ると、値が 0x58 の 1 つの要素配列しかありません。上記と同じように、mallocを何度も使用しましたが、突然機能しなくなりました。malloc がどのように機能するかについてオンラインでいくつかの例を再確認しましたが、正しく設定されていると思います。

update_size に 50 などの小さい値を使用してみましたが、問題は解決しませんでした。

タイプキャストを取り出そうとしましたが、それも役に立ちません。

Keil IDE で stm32F4 MCU に取り組んでいます。洞察はありますか?

4

2 に答える 2

3

これは、デバッガーが配列の実際の長さを認識していないためです。デバッガーの観点からarraystuffsは、単なるポインターです。そのため、1 つの要素のみが表示されます。

あなたが示したコードには何も問題がないので、プログラムが期待どおりに動作しない場合、問題は別の場所にあります。

于 2013-07-25T21:20:27.193 に答える
-1

私の経験では、メモリスペースを要求するときに、保存するもののサイズにアイテムの量を掛けると、常に便利です。たとえば、int の配列が必要な場合は、次のようにします。

int *my_ints; my_ints = (int*) malloc(20*sizeof(int));

あなたの場合、arraystuffs = (uint8_t *) malloc(update_size*sizeof(uint8_t));

于 2013-07-25T20:43:10.177 に答える