程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了为 malloc 函数设置合适的大小大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决为 malloc 函数设置合适的大小?

开发过程中遇到为 malloc 函数设置合适的大小的问题如何解决?下面主要结合日常开发的经验,给出你关于为 malloc 函数设置合适的大小的解决方法建议,希望对你解决为 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,请注明来意。
标签:malloc