正确使用malloc

Mik*_*nke 0 c malloc dynamic-allocation

我正在努力刷新我的C技能.假设我正在尝试执行a malloc和a calloc:

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;
       }
Run Code Online (Sandbox Code Playgroud)

我想我在这里正确使用calloc,但我不确定我是否正确使用malloc.当我需要返回虚空时,它会让我感到困惑.

abe*_*nky 5

你在两种情况下都做错了: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无缘无故地随便打电话.


Vla*_*cow 5

我想你的意思是以下几点

void * allocate_array( size_t member_size, size_t nmember, bool clear )
{
    return clear ? calloc( nmember, member_size ) : malloc( nmember * member_size );
}
Run Code Online (Sandbox Code Playgroud)

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

考虑到这个if语句

   if(clear){
       // ... 
   } else if(!clear) {
       // ... 
   }
Run Code Online (Sandbox Code Playgroud)

写得更好

   if(clear){
       // ... 
   } else {
       // ... 
   }
Run Code Online (Sandbox Code Playgroud)

最后的记录更清楚,