C复制自动变量

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

我正在尝试学习C,因为我想为Python编写C扩展。目前,我对内存分配感到困惑,我还不太了解它是如何工作的。我基本上看了medium中描述的哈希表实现。您可以在github上找到代码。

给我带来麻烦的部分是put函数(或ht_put,他称之为)。有一个struct Node用来建立链斗列表:

typedef struct List
{
  char *key;
  char *value;
  struct List *next;
} List;

并且在put函数中,键/值对基本上会被复制和分配,以便他能在以后释放它们,如果我理解正确的话:

 node->key = strdup(key);
 node->value = strdup(value);

我不明白,为什么他要麻烦复制这些值。我尝试直接使用这些值,而不复制它们(并删除免费的值),并且效果很好。我想知道,是否要复制自动局部变量,如果您不复制它们或类似的东西,但是我用valgrind找不到任何线索。

c dynamic-memory-allocation
1个回答
0
投票

通常,这些语句中使用的参数键和值

 node->key = strdup(key);
 node->value = strdup(value);

没有必要进行动态分配。例如,键可以是指向字符串文字的指针或指向本地字符串的指针。而且,即使这些参数是动态分配的,它们的所有者也可以删除它们。在这种情况下,将至少有两次尝试释放相同程度的内存。

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