使用 calloc 为 int 指针分配内存

Allocating memory with calloc for an int pointer

大家好,据我所知,在 64 位系统上运行时,在 C 中给出了下面的示例,指针是 8 字节。这里的 calloc 会不会分配太少的内存,因为它占用 4 个字节的 sizeof(int)?事情是,这仍然有效。它会覆盖内存吗?希望对此有所了解。

奖金问题:如果我删除类型转换 (int*),我有时会收到警告“从 'void*' 到 'int*' 的无效转换,这是否意味着考虑到警告它仍然有效?

int *ptr;
ptr = (int*)calloc(4, sizeof(int));

calloc 正在分配您在堆上请求的内存量。指针由您的编译器分配到寄存器或堆栈中。在这种情况下,calloc 实际上在堆上为 4 int 分配了足够的内存(在大多数系统上这将是 16 个字节,但对于 arduino uno 它将是 8,因为 sizeof(int) 是 2),然后将指向该分配内存的指针存储在您的 register/stack 位置。

对于奖金问题:Arduino 使用 C++ 而不是 C,这意味着它使用 C++ 的更强大的类型系统。 void *int * 是不同的类型,所以它在抱怨。使用 C++ 时,您应该转换 malloc 的 return 值。