【发布时间】:2019-07-08 10:09:53
【问题描述】:
假设我有一个如下所示的结构:
typedef struct node{
char **word_ptrs;
int value;
struct node *next;
} Node;
我已经为链表动态分配了空间,以及这个结构中的 word_ptrs。
例如:
Node *head = malloc(sizeof(Node)); // not important, what I care is not this node.
head->word_ptrs = malloc(10 * sizeof(Node)); // I care about this.
我的问题是:我知道如何释放链表,但是当我尝试释放动态分配的数组时我感到困惑。当我尝试释放上面的数组时,我应该直接释放整个数组吗?或者我应该去释放该数组中的每个 char *?
谢谢。
【问题讨论】:
-
这取决于这些指针的来源。如果它们指向动态分配的内存,则必须。如果他们不这样做,你就不能。
-
在上述情况下,这将取决于您如何分配内存,这是指向指针概念的指针。所以通常首先你必须分配 head->word_ptrs = malloc(10 * sizeof(char *));这将分配行数,然后您必须为每一行分配 head->word_ptrs[i] = malloc(
* sizeof(char));。我可以一直到 9,在这之后你可以将字符串信息存储到这个。在释放时,你必须先释放 word_ptrs[i],然后再释放 word_ptrs。所以你必须释放所有分配的地址。