我正在尝试刷新我的C技能。假设我正在尝试执行malloc
和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;
}
我想我在这里正确使用了 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,您需要:
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 {
// ...
}
最后的记录更清楚,