【问题标题】:Correct free() of string array C纠正字符串数组C的free()
【发布时间】:2014-03-12 17:03:20
【问题描述】:

这可能是新手的错误,但我非常感谢任何关于我到底做错了什么的提示。

代码:

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,我仍然看到堆内存泄漏 - 我该如何解决这个问题? 我怀疑我分配了太多空间 - 但是,我该如何释放我不需要使用的空间?

感谢任何提示!

【问题讨论】:

    标签: c string malloc free


    【解决方案1】:

    问题是当你写这个时:

    nameslist[0]="John";
    

    您实际上并没有使用您分配的内存。 "John" 本身就是一个指针,你正在用这个新指针覆盖 malloc 返回的地址。

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

    【讨论】:

    • +1 在常量上调用free 也可能不是一个好主意,这也修复了。
    【解决方案2】:

    您的 mallocfree 内容很好,但是当您尝试执行这样的分配时,您正在孤立原始字符串:

    nameslist[0]="John";
    

    你应该使用strcpy:

    strcpy(nameslist[0], "John");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      • 2020-12-02
      • 1970-01-01
      相关资源
      最近更新 更多