c memset指针数组

标签 c memset

我动态分配了长度为 10 的指针数组。

现在我想用全“1”来初始化这个数组。

但是如果我打印出数组[2],它会显示 0。 如果我打印出 array[1],它会显示一个很大的数字,例如 4905904374893479。 为什么这个数组没有在所有位置都设置为“1”?

我对此没有太多经验,但我没有找到解决方案。

uint64_t *array=  malloc((10) * sizeof(uint64_t));
memset(array,1, sizeof(*array));
printf("array[2]: %llu \n", primes[2]); 

最佳答案

*array 是一个单个 uint64_t,而不是整个数组。这意味着您的 memset 没有设置整个数组,而只是设置它的第一个元素。

并且,在决定使用 sizeof(array) 之前,请注意它会衰减到指向该数组的指针,因此也不会是正确的大小。

memset 函数适用于字节而不是更广泛的数据类型,因此,除非您希望将每个字节设置为相同的值,否则 memset 不是适合该工作的工具。将它们设置为 0 时它会起作用,因为它是由全零模式表示的。

您最好的选择是使用以下内容显式初始化每个:

uint64_t *array=  malloc(10 * sizeof(uint64_t));
// should really check for malloc failure.
for (size_t idx = 0; idx < 10; idx++)
    array[idx] = 1;

关于c memset指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40317610/

相关文章:

c - memset 字符串的 strcmp 上的 SIGSEGV

c - 线程中的全局数组

c - pthreads生产者消费者死锁

Android alsa snd_pcm_open default no such file o 目录

multithreading - memset 与绑定(bind)到每个物理内核的线程并行

c - '\n' 在 memset 之后保存在数组中 (C)

c++ - unistd.h read() 正在读取更多数据然后被写入

c - 成功从链表中删除节点的代码还需要什么?

GCC 中的 CLI 命令表

c++ memset导致int **指针的段错误