正确使用 malloc

Using malloc correctly

我正在努力更新我的 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。当我需要 return 无效时,它让我感到困惑。

你在这两种情况下都做错了: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 调用。

我认为你的意思如下

void * allocate_array( size_t member_size, size_t nmember, bool clear )
{
    return clear ? calloc( nmember, member_size ) : malloc( nmember * member_size );
}

至于你的函数定义,那么calloc的调用和malloc的调用都不正确。

考虑到这个 if 语句

   if(clear){
       // ... 
   } else if(!clear) {
       // ... 
   }

最好写成

   if(clear){
       // ... 
   } else {
       // ... 
   }

最后的记录更清晰,