如何为C中的指针数组动态分配内存?

时间:2011-11-15 05:13:02

标签: c memory-management dynamic

我需要为指针数组动态分配内存。

让我们假设,

char *names[50];
char *element;

我使用以下代码动态分配内存,这会产生错误。

names=malloc(sizeof(char *));

之后,我需要为这个指定另一个字符指针,比如说

names=element;

我收到的错误为": warning: assignment from incompatible pointer type"

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

  

names = malloc(sizeof(char *));

将分配4或8个字节(取决于您的系统)。这没有意义,因为你的数组已在声明中的50个条目中调整大小...

  

名称=元素;

这不是C中如何使用数组。您已声明“names”中有50个元素,并且每个元素都被分配为指向字符数组的不同指针。您需要确定要分配的数组中的哪个元素。例如:

char *test1 = "test string 1";
char *test2 = "test string 2";

names[0] = test1; // Assign pointer to string 1 to first element of array
names[1] = test2; // Assign pointer to string 2 to second element of array

答案 1 :(得分:1)

如果您想动态分配N char *指针数组,那么您可以使用:

char **names;

names = malloc(N * sizeof p[0]);

要将char *element分配给数组中的第一个元素,您可以使用:

names[0] = element;

答案 2 :(得分:1)

您可能需要查看本教程: http://dystopiancode.blogspot.com/2011/10/dynamic-multidimensional-arrays-in-c.html 它说明了如何为数组,矩阵,立方体和超立方体分配动态内存,以及如何释放它。