C语言 正确使用 malloc



我正在尝试刷新我的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。当我需要返回时,它让我感到困惑。

在两种情况下您都做错了: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 {
       // ... 
   }

最后的记录更清楚,

相关内容

  • 没有找到相关文章

最新更新