正确使用 malloc
Using malloc correctly
我正在努力更新我的 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。当我需要 return 无效时,它让我感到困惑。
你在这两种情况下都做错了: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 {
// ...
}
最后的记录更清晰,
我正在努力更新我的 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。当我需要 return 无效时,它让我感到困惑。
你在这两种情况下都做错了: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 {
// ...
}
最后的记录更清晰,