首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Tinyos1,x的NesC中的动态数组

使用Tinyos1,x的NesC中的动态数组
EN

Stack Overflow用户
提问于 2013-04-16 11:27:55
回答 2查看 872关注 0票数 0

我想定义动态array,我不想给它固定的长度,例如:uint16_t array1[10]

需要动态增长时,我们插入新的项目。

我想让它适用于TinyOs 1.x

EN

回答 2

Stack Overflow用户

发布于 2013-04-24 18:56:55

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

票数 1
EN

Stack Overflow用户

发布于 2013-04-16 12:03:47

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

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

代码语言:javascript
复制
#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();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16028258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档