繁体   English   中英

如何在 C 中的 function 中动态分配结构数组

[英]How to dynamically allocate array of structs inside a function in C

我正在尝试动态调整 function 中的支柱数组的大小,该数组正在从文件中读取数据,所以我不知道编译时的大小。

填充动态分配的 arrays “异常抛出:写访问冲突)时,我收到一个错误,主要是在(看似)随机索引上为该数组分配值的行之一,如i=170 in (mystruct_array)[i].b = i in main,表明我没有正确分配 function 中的 memory。我在这里搜索过,但找不到我做错了什么 - 我很感激这可能是我遗漏的一些微不足道的事情。所以,请,我在这里做错了什么?

#define ELEMENT_COUNT   10000

typedef struct mystruct
{
    uint64_t a;
    uint64_t b;
    uint64_t c;
} mystruct_t;

void test(mystruct_t ** p_struct_array, uint32_t * p_count)
{
    *p_count = ELEMENT_COUNT;
    *p_struct_array = malloc(ELEMENT_COUNT * sizeof(mystruct_t *));
}

void main()
{
    mystruct_t * mystruct_array = NULL;
    uint32_t count;
    test(&mystruct_array, &count);
    for (uint64_t i = 0; i < ELEMENT_COUNT; i++)
    {
        (mystruct_array)[i].a = i;
        (mystruct_array)[i].b = i;
        (mystruct_array)[i].c = i;
    }
    getch();
}
*p_struct_array = malloc(ELEMENT_COUNT * sizeof(mystruct_t *));

应该

*p_struct_array = malloc(ELEMENT_COUNT * sizeof(mystruct_t));

您想分配一个由 10000 mystruct_t的数组,而不是 10000 个指针。


许多人建议通过始终遵循以下模式来避免此类错误

ptr = malloc(count * sizeof(*ptr));

在你的情况下会读

*p_struct_array = malloc(ELEMENT_COUNT * sizeof(**p_struct_array));

实际上**p_struct_array的类型是mystruct_t ,而不是mystruct_t *

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM