试图创建使用动态存储器分配节点指针数组

问题描述 投票:0回答:1

目前,我想要做简单的东西,把我的节点列表为指针数组的节点,这样我可以用它的另一个功能。

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;

我一直在试图做这样的事情去有关存储指向我的每一个节点的数组,但还没有成功,并不完全了解如何使指针数组(使用双指针) 。如何指针存储到指针的动态分配的数组任何帮助将有很大的帮助。

c malloc dynamic-memory-allocation
1个回答
4
投票

这两条线是一个小问题:

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两个aryPtrmyList。您还可以使用相同的索引两个aryPtrmyList,所以你只需要一个单一的变量。

© www.soinside.com 2019 - 2024. All rights reserved.