【问题标题】:Freeing an array of character pointers (string literals)?释放字符指针数组(字符串文字)?
【发布时间】:2014-05-02 00:03:49
【问题描述】:

我试图弄清楚如何为字符指针数组(字符串文字)释放内存,但我不太明白语法。这就是我声明和初始化数组的方式。

char * words[] = { "THESE", "ARE", "SOME", "WORDS" };

我试过这样做......

free(words);

还有这个……

for(i = 0; i < 4; i++) {
    free(words[i]);
}

但第一个导致 glibc 出现某种无效指针错误,第二个导致分段错误。

那么释放这些内存的正确方法是什么?

【问题讨论】:

  • 这是一个静态初始化的数组。无论如何,你不应该释放它。
  • 不要free你没有malloc的东西。
  • “什么是正确的方法”?没做什么。它会自动释放。

标签: c arrays pointers memory


【解决方案1】:

如果您没有分配它(例如malloccalloc),那么您也不应该释放它(例如free)。

如果您需要释放从函数返回的指针,文档通常会非常清晰明确,例如 strdup 就是这种情况。

【讨论】:

  • 啊,好吧。我问是因为我的程序中有一些内存泄漏,看起来这些数组有正确数量的元素成为罪魁祸首。我猜我的向量和字符串库会更有趣......
  • 尝试使用 valgrind 进行调试。
  • @DarinBeaudreau:不要通过随机猜测来编程。学习语言规则并遵守它们。
  • 这在标准 C 中是正确的。在 POSIX 和编译器扩展中,有时你会发现返回内存的函数你必须 free() 尽管你没有 malloc 它。例如,strdupgetline
猜你喜欢
  • 2011-01-11
  • 2012-09-29
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多