我正在尝试更新我的 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。当我需要返回 void 时,这让我很困惑。
最佳答案
在这两种情况下你都做错了: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
。
关于c - 正确使用 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35349427/