0

我正在尝试使用 malloc 来动态分配数组。在我使用它之后,我只得到了一个包含一个元素的数组。代码如下:

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

arraystuffs = (uint8_t *) malloc(update_size);

然后我尝试将我认为应该拥有的东西分配给数组。当我查看调试器时,我只有一个 1 元素数组,其中的值为 0x58。之前用过多次malloc,和上面一样,突然就不行了。我在网上仔细检查了几个关于 malloc 应该如何工作的示例,并且我相信我已经正确设置了它。

我曾尝试对 update_size 使用较小的值,例如 50,但这并没有解决问题。

我曾尝试将类型转换取出,但这也无济于事。

我正在 Keil IDE 中开发 stm32F4 MCU。有什么见解吗?

4

2 回答 2

3

这是因为调试器不知道数组的实际长度。从调试器的角度来看,arraystuffs只是一个指针。这就是为什么它只显示一个元素。

您显示的代码没有任何问题,因此如果您的程序未按预期运行,则问题出在其他地方。

于 2013-07-25T21:20:27.193 回答
-1

根据我的经验,当您要求内存空间时,将要存储的大小乘以您将拥有的项目数量总是有用的。例如,如果你想要一个整数数组,我会这样做:

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

在你的情况下 arraystuffs = (uint8_t *) malloc(update_size*sizeof(uint8_t));

于 2013-07-25T20:43:10.177 回答