指针数组的内存分配

时间:2010-10-24 15:44:19

标签: c

我需要为需要用作2d数组的指针分配内存。我知道如何为char指针和int指针分配内存我很困惑如何为指针数组分配内存。图形表示原因是非常有帮助的,下面的代码也不错吗?

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

4 个答案:

答案 0 :(得分:11)

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

我假设您要在names内分配5个指针,但只是指针。

您应该根据指针的大小乘以元素的数量来分配它:

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

您不需要使用循环逐个分配它们。请注意,您需要使用**

指定它是指针指针

答案 1 :(得分:1)

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

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

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

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

我不是超级编码员,但正如我现在所说,这是正确的解决方案。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

当数组声明为

char *names[5];

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

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

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