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.当我需要返回虚空时,它会让我感到困惑.
你在两种情况下都做错了:malloc和calloc.
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(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 );
}
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)
最后的记录更清楚,