这可能是一个新手的过错,但是对于我究竟在做什么错的任何提示,我都非常感激。

编码:

int main()
{
  int i =0;
  char ** nameslist;
  nameslist = malloc(5 * sizeof(char*));

  for (i=0; i <5; i++)
  {
      nameslist[i]=malloc((20+1)*sizeof(char));
  }

  nameslist[0]="John";
  nameslist[1]="Adam";
  nameslist[2]="Nick";
  nameslist[3]="Joe";
  nameslist[4]="Peter";

  for (i=0; i <5; i++)
  {
    free(nameslist[i]);
  }

  free(nameslist);
  return 0;
}

使用Valgrind,我仍然看到堆内存泄漏-如何解决此问题?
我怀疑我分配了太多空间-但是,如何释放不需要使用的空间呢?

感谢任何提示!

最佳答案

问题是,当您编写此代码时:

nameslist[0]="John";

您实际上并没有使用已分配的内存。 “John”本身就是一个指针,并且您将用此新指针覆盖malloc返回的地址。

使用strncpy()函数将字符串复制到您分配的内存中。

关于更正字符串数组C的free(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22358753/

10-08 23:17