大佬教程收集整理的这篇文章主要介绍了为 malloc 函数设置合适的大小,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
当我有一个不明显的类型时,我经常发现自己花了很多时间来弄清楚我应该如何正确调整 @H_676_3@malloc 的大小。下面是一个例子:
typedef struct {
char* key;
char* value;
} hash_item;
typedef struct {
int size; // max size of the table
int count; // how many items are currently in the table
hash_item** items; // will have size * hash_items in the array
} hash_table;
现在,当我创建一个新的哈希表时,我会做这样的事情:
hash_table *table = malloc(sizeof(hash_tablE));
table->items = malloc(sizeof(*hash_item) * sizE); // this is tricky for me
“尺寸”正确吗?我怎么知道 sizeof(*hash_item)
是正确的单位大小,而不是例如:
sizeof(hash_item)
sizeof(table->items[0])
sizeof(*(table->items))
当 @H_676_3@malloc 指的是非原始数据类型时,是否有一个很好的规则来确定如何调整它的大小?
您通常不需要使用 @H_676_3@malloc 大小的类型,您应该避免使用它。您可以改用“示例对象”:
PointerToThing = malloc(numberOfThings * sizeof *PointerToThing);
所以这很简单:*PointerToThing
是被指向的东西的类型,所以它的大小就是你想要的。
此外,它减少了某些错误的机会:
PointerToThing
指向的内容键入类型说明,则可能会出错。 *PointerToThing
很简单,所以人们不太可能犯错,尤其是一旦它成为习惯。PointerToThing
的类型,您必须记住还要搜索使用该类型的所有地方并在那里进行更改。用上面的方法,类型不会出现,所以不能忽略——类型改变时不需要做任何改变; sizeof
会自动适应 *PointerToThing
的任何类型。而且 PointerToThing
不必是一个简单的变量。它可以是一个表达式,例如 table->items
,您可以使用 @H_676_3@malloc(numberOfItems * sizeof *table->items)。
以上是大佬教程为你收集整理的为 malloc 函数设置合适的大小全部内容,希望文章能够帮你解决为 malloc 函数设置合适的大小所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。