c - 正确使用 malloc

标签 c malloc dynamic-allocation

我正在尝试更新我的 C 技能。假设我正在尝试执行 malloccalloc:

void* allocate_array(size_t member_size, size_t nmember,bool clear)
       if(clear){
            void *cal = calloc(nmember, sizeof(member_size));
            return cal;
       } else if(!clear) {
            void *mal = (void *)malloc(sizeof(member_size));
            return mal;
       }

我认为我在这里正确使用了 calloc,但我不确定我是否正确使用了 malloc。当我需要返回 void 时,这让我很困惑。

最佳答案

在这两种情况下你都做错了:malloccalloc

malloc 将分配您指定的字节数。

你调用malloc(sizeof(member_size)):
变量 member_size 的类型为 size_t(或多或少是一个 int)。
sizeof(size_t) 是 4 字节(在许多平台上)。
所以,sizeof(member_size) 是 4 个字节,而您正在调用 malloc(4)

我不认为你想要 4 个字节。
我想你想要 malloc(nmember * member_size)


同样,对于 calloc,您需要:calloc(nmember, member_size)

我不知道你为什么无缘无故地随机调用 sizeof

关于c - 正确使用 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35349427/

相关文章:

c - 使用 getch() 和 getchar() 清除输入缓冲区的区别?

c - 在 C 中多次释放分配的 char*

c - 为什么我在不使用 malloc() 分配后不必使用 free()

c - 在 C 中破坏结构的最佳方法是什么

c - 指向动态指针数组的指针指向指向字符串的动态指针数组

C - 行走一和零测试,通过进位旋转

c - Memmove 重叠

c - 在我的字符串中获取垃圾

c - 32 位 Linux 和 64 位 Linux(英特尔桌面 CPU)上的默认 C 调用约定是什么?

c++ - 如何检查 malloc 是否持有锁