gpt4 book ai didi

c - 以通用方式安全地初始化 C 中的数组

转载 作者:太空宇宙 更新时间:2023-11-04 01:40:07 26 4
gpt4 key购买 nike

我写了一些代码,使用 memset 来初始化内置类型的数组,比如 ints、shorts、floats,更重要的是,pointers,比如

typedef void* slot_t;
#define EMPTY_SLOT (slot_t)NULL
...
int n = 10;
slot_t slots[] = (slot_t[])malloc(sizeof(slot_t)*n)
memset(slots,(int)EMPTY_SLOT,n*sizeof(slot_t));

此代码在 Linux32 中运行良好,其中 memset 接受 32 位 int 作为第二个参数(即初始化元素),但对于 Linux64 则不然,其中 sizeof(slot_t)>sizeof(int) 和 IIRC,在 memset 接受 char 作为其第二个参数的其他平台中。我还没有验证我在我的项目中遇到的任何错误都是由于这个,但无论如何,可以肯定的是,最好采用更安全但仍然“通用”的方法(如果存在)。你知道吗?

最佳答案

使用

slot_t slots[] = (slot_t[])calloc(n,sizeof(slot_t))

它本身就是干净的内存

关于c - 以通用方式安全地初始化 C 中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6963700/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com