C 为指向指针数组的指针分配空间

C 为指向指针数组的指针分配空间,c,C,你好。我有:MAP_ITEM**将我认为是指针映射到指针数组(如果我错了,请纠正我),我必须为它分配空间。我可以使用malloc为1个指针分配空间,但不知道如何做到这一点。非常感谢您的帮助。导入stdlib.h 然后使用malloc函数。 其中是一维数组的示例: int* my_in_array = (int*) malloc(sizeof(int) * size_of_my_array); 请注意,malloc接收要分配的字节数,因此sizeof将告诉您一个数据类型需要多少字节(在本例中为i

你好。我有:MAP_ITEM**将我认为是指针映射到指针数组(如果我错了,请纠正我),我必须为它分配空间。我可以使用malloc为1个指针分配空间,但不知道如何做到这一点。非常感谢您的帮助。

导入stdlib.h 然后使用malloc函数。 其中是一维数组的示例:

int* my_in_array = (int*) malloc(sizeof(int) * size_of_my_array);
请注意,malloc接收要分配的字节数,因此sizeof将告诉您一个数据类型需要多少字节(在本例中为int,但它可用于字符、结构等),然后我将其乘以我的数组的大小,即数组的元素数

现在,试着为您的情况使用这个例子。

这里有一个例子,是为与char**一起使用而编写的,但是您可以根据自己的目的修改:

char ** allocMemory(char ** a, int numStrings, int maxStrLen)
{
    int i;
    a = calloc(sizeof(char*)*(numStrings+1), sizeof(char*));
    for(i=0;i<numStrings; i++)
    {
      a[i] = calloc(sizeof(char)*maxStrLen + 1, sizeof(char));
    }
    return a;
}    
//

您还需要释放使用
allocMemory创建的内存

void freeMemory(char ** a, int numStrings)
{
    int i;
    for(i=0;i<numStrings; i++)
        if(a[i]) free(a[i]);
    free(a);
}  

学习基础知识。。。回答这个非常基本的问题会给你带来伤害。如果您还不知道指向指针的指针、数组或指针数组之间的区别,那么您现在还不应该尝试分配堆内存。这对我帮助很大。在malloc的文档中,甚至没有提及**。真的谢谢你。这就是为什么我说你应该学习基础知识:
*
是指针,
**
是指向指针的指针。如果你不知道这些,也不知道如何使用双重间接寻址,那么你应该远离这些东西。首先要了解指针实际上是什么,如何使用它们以及它们的实际用途。指向指针的指针。现在,问题是我必须在地图中插入二维数组。这就是我受挫的地方。我可以将指针分配给基本数组并使用它:int*指针=(int*)malloc(大小为(int)*numofelements);但是我如何分配二维数组,创建指针,然后访问它的元素?(int**)malloc(sizeof(int*)*numofpointers)注意:您将需要更多的malloc调用,而不仅仅是一个。您应该使用另一个函数:free()来释放分配的内存块,虽然操作系统在程序结束时会这样做,但在您不再需要内存时释放内存是一种很好的做法。欢迎您
char**
管理起来并不琐碎,但只要小心,就可以了。
void freeMemory(char ** a, int numStrings)
{
    int i;
    for(i=0;i<numStrings; i++)
        if(a[i]) free(a[i]);
    free(a);
}  
freeMemory(arrayOfStrings, 10);