Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 指向结构的指针数组的动态分配_C_Arrays_Dynamic_Struct_Malloc - Fatal编程技术网

C 指向结构的指针数组的动态分配

C 指向结构的指针数组的动态分配,c,arrays,dynamic,struct,malloc,C,Arrays,Dynamic,Struct,Malloc,我的程序中有两个结构 id的链接列表和一个单词 typedef struct related { int id; struct related* next; } RELATED; typedef struct word { int id; char name[NAME_LEN]; RELATED *related; } WORD; 我想要一个WORD的数组,我想要它是动态的 我有两个指向单词的指针: WORD* word1; WORD* word2;

我的程序中有两个结构

id的链接列表和一个单词

typedef struct related
{
    int id;
    struct related* next;
} RELATED;

typedef struct word
{
    int id;
    char name[NAME_LEN];
    RELATED *related;
} WORD;
我想要一个WORD的数组,我想要它是动态的

我有两个指向单词的指针:

WORD* word1;
WORD* word2;
有价值

当我尝试以这种方式动态分配时:

WORD** arr = (WORD**)malloc(sizeof(WORD*)*10)  // to hold 10 words
WORD* arr[40];
尝试向数组中添加单词时,第一个单词被正确添加,但第二个单词会覆盖第一个单词:

arr[0] = word1;
arr[1] = word2;
当我以这种方式定义数组时:

WORD** arr = (WORD**)malloc(sizeof(WORD*)*10)  // to hold 10 words
WORD* arr[40];
同样的加词效果很好

arr[0] = word1;
arr[1] = word2;
无法找到这种动态分配的正确方法。。谢谢你的帮助

而不是

// arr as pointer to pointer to WORDS
WORDS** arr = (WORDS**)malloc(sizeof(WORDS*)*10);
分配

// arr as pointer to WORDS
WORDS* arr = malloc(sizeof(*arr) * 10);  // WORDS *, not WORDS **
  • 可能有用
  • 在C中不鼓励强制转换
    malloc()
    的结果
  • 考虑
    type*p=malloc(sizeof(*p)*N)样式。易于维护,不易出错

  • 我找不到malloc()和使用指向WORD指针的指针作为数组的任何问题。有一件事我可以指出,您没有为word1和word2分配内存,它们有一个垃圾地址。正在将相同的垃圾地址分配给arr[0]和arr[1]。如果您上传完整的代码,它将有助于找出确切的问题。

    您可以使用以下代码片段为2D数组动态分配内存:

    设“m”和“n”是数组的维数

    WORDS** arr = (WORDS**)malloc(sizeof(WORDS*)*m);
    
    for(int i = 0 ; i < m ; i++)
    
    {
    
        for(int j = 0 ; j < n ; j++)
    
        {
    
             arr[i] = (WORDS*)malloc(sizeof(WORDS)*n);
    
        }
    
    }
    
    WORDS**arr=(WORDS**)malloc(sizeof(WORDS*)*m);
    for(int i=0;i
    不清楚的是“容纳10个单词”的注释。您的
    malloc()
    包含10个指向单词的指针。此外,您只是想复制指针
    word1、word2
    还是它们指向的日期?@Andrey Chasovski您是如何确定“但是第二个指针超过了第一个指针”?有了你编辑的信息,你似乎做得很好-需要更多信息。(是的,并没有释放内存,不过这很好)它应该可以工作,你能分享你的程序代码吗?