我写了一些代码,使用 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/