目前,我想要做简单的东西,把我的节点列表为指针数组的节点,这样我可以用它的另一个功能。
typedef struct {
int data;
} myNode;
当我试图让我的节点指针数组的功能,我喜欢写东西(假设我有一个名为myList中的所有节点的列表):
myNode** aryPtr = malloc(sizeof(myNode*)) * numItemsInList);
并且对于每个点,我分配用于指针做的存储器:
int inc = 0;
int z = 0;
aryPtr[inc] = malloc(sizeof(myNode));
aryPtr[inc] = &(myList[z]);
inc += 1;
z += 1;
我一直在试图做这样的事情去有关存储指向我的每一个节点的数组,但还没有成功,并不完全了解如何使指针数组(使用双指针) 。如何指针存储到指针的动态分配的数组任何帮助将有很大的帮助。
这两条线是一个小问题:
aryPtr[inc] = malloc(sizeof(myNode));
aryPtr[inc] = &(myList[z]);
第一个任务
aryPtr[inc] = malloc(sizeof(myNode));
分配内存,并使得aryPtr[inc]
指向该内存。但接下来的任务
aryPtr[inc] = &(myList[z]);
扔掉的malloc
调用的结果,并重新分配aryPtr[inc]
指向其它地方。这导致内存泄漏。
它类似于具有简单int变量,并赋予它多次:
int a;
a = 5;
a = 10;
然后不知道为什么a
不等于5
。
为了解决这个问题,或者与malloc
下降的第一项任务,并只
aryPtr[inc] = &myList[z]; // Make aryPtr[inc] point to myList[z]
或取消引用目标指针复制的结构:
aryPtr[inc] = malloc(sizeof(myNode));
*aryPtr[inc] = myList[z]; // Copy the structure itself
另两件事情:
随着你展示的代码(你真的需要提供适当的Minimal, Complete, and Verifiable Example),它看起来像你总是使用索引0
两个aryPtr
和myList
。您还可以使用相同的索引两个aryPtr
和myList
,所以你只需要一个单一的变量。