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

标签 c 64-bit 32bit-64bit memset

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

相关文章:

android - 如何在 Android Lollipop 中以编程方式知道应用程序的进程是 32 位还是 64 位?

c++ - eclipse ncurses 和 xterm,打印未知字符

c - x64 程序偶尔会返回正确的 SIDT 值(x64 程序集)

.Net 4.0 应用程序在 64 位上比 32 位慢(分析和可能的解决方案)(应用程序使用 NetAdvantage)

macos - 在 Mac OS X 上的 64 位进程中,中等大小的内存分配如何失败?

Python 64 位无法在 Windows HPC 上正确启动 (0xc00000cc)

python - 如何在现有的 32 位安装中创建 python conda 64 位环境?

c - 如何从 C 语言安装的文本文件中获取变量

由于 #ifdef,ctags 在带有不平衡大括号的源文件上阻塞

c - strncat 实现?