C 如何将动态分配的字符串释放到矩阵中?

C 如何将动态分配的字符串释放到矩阵中?,c,C,我有一个malloced char*str char *str = strdup("first\nsecond\nthird\nfourth"); 我有一个矩阵字符**内容 char **content; 我的目标是用“\0”替换“\n”,并将每个第一个地址按顺序放在矩阵中每个“\0”之后。以下代码起作用: int count_lines(char *str, char **content) { int len; if (content) content[0

我有一个malloced char*str

char *str = strdup("first\nsecond\nthird\nfourth");
我有一个矩阵字符**内容

char **content;
我的目标是用“\0”替换“\n”,并将每个第一个地址按顺序放在矩阵中每个“\0”之后。以下代码起作用:

int      count_lines(char *str, char **content)
{
  int    len;

  if (content)
    content[0] = str;
  len = 0;
  while (str && *(str++))
    {
      if (*str && *(str - 1) == '\n')
        {
          len++;
          if (content)
            {
              *(str - 1) = 0;
              content[len] = str;
            }
        }
    }
  if (content)
    content[len + 1] = 0;
  return (len + 1);
}

void   test()
{
  char **content;
  int  lines;

  lines = count_lines(str, NULL);
  content = malloc(sizeof(char *) * (lines + 1));
  count_lines(str, content);
}
然后,内容[0]包含“第一”,内容[1]包含“第二”,并且 [contant[2]包含“第三个”,contant[3]包含“第四个”

现在我的问题是:我在尝试从第一个地址释放时出错。我不知道我所做的操作是否会破坏内存或idk。请帮助,如果可能,如何释放此内存。

当您分配()内存时,系统会跟踪您分配的块的大小-释放时,系统会释放与分配的相同数量的内存。 因此,如果只使用一个malloc(),则只能释放()一次-指向现在已释放区域的任何指针都将无效


因此,您需要一个free()表示“str”,一个free()表示“content”。释放str后,“content”中的所有指针都将无效,但您必须释放“content”本身。或者,首先释放“content”和“str”稍后。

您必须对每个单词进行malloc。1 free==1 malloc。请将代码粘贴到您尝试释放的位置。

您究竟是如何尝试释放内存的?释放内容的部分在哪里?嗯,我认为您应该只使用
free(content)
即可。这是因为您将其分配为单个内存块(您只调用了
malloc
一次)您只有一个分配的内存块。在某些位置放置“\0”不会改变任何事情。只释放第一个块
content[0]
content
本身。我不需要这个,我想自己做,或者分配一次,然后释放一次-这很简单不,您不明白我的方式