如何释放动态分配的字符串分为矩阵?

时间:2017-01-11 15:55:12

标签: c

我有一个malloced char * str。

char *str = strdup("first\nsecond\nthird\nfourth");

我有一个矩阵char **内容。

char **content;

我的目标是将'\ n'替换为'\ 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);
}
  

然后,content [0]包含“first”,incnt [1]包含“second”和   [contant [2]包含“third”,而[3]包含“4th”。

现在我的问题是以下问题:当我尝试从第一个地址释放时出现错误。我不知道我做了什么打破了记忆或idk ..请帮助,如果可能的话如何释放它。

2 个答案:

答案 0 :(得分:0)

当你分配()内存时,系统会跟踪你分配的块的大小 - 释放时,系统会释放分配的相同数量。 所以,如果你只使用一个malloc(),你只能释放一次() - 任何指向现在释放的区域的指针都会失效。

因此,你需要一个free()用于" str"和一个free()用于"内容"。释放str后,"内容"中的所有指针变得无效,但你必须免费获得内容"本身。或者,免费"内容"首先和" str"后面。

答案 1 :(得分:0)

你必须对每个单词进行malloc。 1个免费== 1个malloc。请将代码粘贴到您尝试免费的地方