【问题标题】:memory allocation for array of pointers指针数组的内存分配
【发布时间】:2011-04-29 20:46:06
【问题描述】:

我需要为需要用作二维数组的指针分配内存。我知道如何为 char 指针和 int 指针分配内存我很困惑如何为指针数组分配内存。原因会很有帮助,下面的代码也可以吗?

char *names[5];
for(i=0;i<5;i++)
{
 names[i]=(*char)malloc(sizeof(char));
}

【问题讨论】:

  • 不清楚你的问题是什么。您的代码已经做了一些有效的事情; names[] 的每个元素都指向在堆上分配的 char。您实际上需要做什么?
  • 一旦正确,请参阅有关如何释放内存的问题:stackoverflow.com/questions/1733881/…

标签: c


【解决方案1】:

不,这不是因为您分配数组时假设维度只有 1 个原始类型 char 元素(即 1 个字节)。

我假设您要分配 5 个指向 names 内的字符串的指针,但只是指针。

你应该按照指针大小乘以元素个数来分配:

char **names = malloc(sizeof(char*)*5);

您不需要使用循环一一分配它们。请注意,您需要使用 ** 指定它是指针的指针

【讨论】:

【解决方案2】:

您正在做的是为 5 个字符分配空间。你可以这样写,它会得到相同的结果:

char *names = (char *)malloc(sizeof(char) * 5);

如果你想要一个指针数组,我认为这是最好的代码

char **names = (char **)malloc(sizeof(char *) * 5);

我不是超级程序员,但就我现在而言,这是正确的解决方案。

【讨论】:

    【解决方案3】:

    此外,简而言之,在这种情况下,您也可以执行以下操作来为五个字符分配存储空间

    names = (char*)malloc(5 * sizeof(char))

    【讨论】:

      【解决方案4】:

      强调杰克最后所说的:他的代码只有在使用 ** 将数组声明为指针指针时才有效。

      当数组声明为

      char *names[5];
      

      我猜分配内存的正确方法几乎和 Ak1to 一样,但乘以所需的字符字符串大小:

      char *names[5];
      for(i=0;i<5;i++)
      {
        names[i]=(char *)malloc(sizeof(char)*80);
      }
      

      否则编译器会抛出关于不兼容类型的错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-10
        • 1970-01-01
        • 2012-07-10
        • 2013-10-04
        • 1970-01-01
        • 2011-02-23
        • 1970-01-01
        • 2015-06-19
        相关资源
        最近更新 更多