【问题标题】:How do I use malloc properly?如何正确使用 malloc?
【发布时间】:2012-01-05 13:14:23
【问题描述】:

假设我有一个 char 变量,它将保存 1000 个字节。

char var[1000];

我将如何使用 malloc 为其中的任何内容分配这么多内存?

我已尝试阅读有关 malloc 的内容,但即使是 K&R 似乎也没有太多关于它的信息。

【问题讨论】:

  • “K&R 似乎没有太多关于它的信息” - 看起来你读过另一本书 :)
  • 你考虑过this question 吗?
  • 我没有对此投反对票...但我猜问题是这似乎是一个相对容易查找的问题(不仅are there duplicates,但有很多例子你可以谷歌上)。
  • 我投了反对票,因为你关于 malloc 的信息很少的说法显然很荒谬。
  • 谷歌搜索,这是第一个出现的,所以请不要对有用的信息投反对票。

标签: c


【解决方案1】:

应该有数百万页解释malloc 的使用,我怀疑你做了很多搜索。但这是你的称呼:

char *var = malloc(sizeof(char) * 1000);

对于其他类型,只需更改它:

int *int_var = malloc(sizeof(int) * 1000);

编辑请记住,您必须在使用后释放分配的内存!否则会出现内存泄漏。

free(var);
free(int_var);

【讨论】:

  • var = malloc( sizeof *var * 1000 ) 通常优于 malloc( sizeof( char ) * 1000 )
  • 这些 cmets 证明了这个问题的有用性。对于如何最恰当地做到这一点,显然存在一些分歧。例如,我看到其他人评论说您应该使用指向的变量 sizeof 而不是重复类型,例如 char *var = malloc(sizeof(*var) * 1000);
【解决方案2】:

你不想对这个变量使用 malloc,因为它已经被分配了,但是你可以通过使用得到类似的结果

char *var = malloc(sizeof(char[1000]));
// do stuff
free(var);

【讨论】:

    【解决方案3】:

    http://www.manpagez.com/man/3/malloc/

    char *pVar = malloc(1000);
    .... use pVar ....
    free(pVar);
    // DONT use pVar anymore
    

    【讨论】:

      【解决方案4】:

      如果您将变量声明为char var[1000];,则您已经静态分配了那么多内存。您无需为此致电malloc

      如果你想使用动态分配并且你的变量是这样声明的:char *var;你可以按如下方式分配内存:

      var = malloc(1000);
      

      完成后不要忘记释放分配的内存:

      free(var);
      

      【讨论】:

      • @dikidera 如果它不是一个指针,那么它已经有它的空间并且不需要 malloc。
      • @dikidera:如果你想动态分配内存,那么你必须使用一个指针来存储它的地址。如果你希望你的变量是一个数组,那么你不要使用 malloc。
      【解决方案5】:

      如果您有 char var[1000],则不需要 malloc,此定义为您的 var 分配 1000*sizeof(char),因此您可以执行类似 var[999] = 'x';

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-26
        • 2015-07-20
        • 2014-03-08
        • 1970-01-01
        • 2014-08-28
        相关资源
        最近更新 更多