我想定义一个动态数组 ,我不想给它恒定的长度,例如: uint16_t array1[10]

插入新商品时需要动态增长。

我希望它适合TinyOs 1.x

===============>>#1 票数:1

AFAIK,TinyOS不支持动态内存分配。 解决方法是调用为AVR和MSP芯片实现的libc函数。

===============>>#2 票数:0

您必须给它一个恒定的长度。 如果您不喜欢它,那么C可能不是适合您任务的语言。

如果您最初使用callocmallocrealloc来分配数组,则可以稍后使用realloc轻松地调整其大小:

#include <stdlib.h>
#include <assert.h>
#include <time.h>

int main(void) {
    uint16_t *array = NULL; /* Starts off as NULL, */
    size_t    length = 0;   /* with 0 items. */

    srand(time(NULL));
    for (size_t x = 0; x < rand(); x++) {
        /* This will resize when length is a power of two, eg: 0, 1, 2, 4, 8, ... */
        if (length & (length - 1) == 0) {
            uint16_t *temp = realloc(array, sizeof *temp * (length * 2 + 1));
            assert(temp != NULL); /* todo: Insert error handling */
            array = temp;
        }

        array[length++] = rand();
    }
}

  ask by Hana90 translate from so

未解决问题?本站智能推荐: