【问题标题】:memory leak Error in cc中的内存泄漏错误
【发布时间】:2015-11-08 16:57:02
【问题描述】:

我有这个代码

char* chars = (char*) malloc (sizeof(char));
memcpy(chars, "", 0);
char* hey = "hello doit";
chars = (char*) realloc (chars, 10);
memcpy(chars, hey, 10);
printf("string: %s\n", chars);
free(chars);

我的内存出现错误

Address "xxxxxxx" is 0 bytes after a block of size 10 alloc'd

我做错了什么?

【问题讨论】:

  • 我没有发现任何问题,看起来 Valgrind 有问题。
  • 对我有用,valgrind-3.10.1 说“所有堆块都被释放了——不可能有泄漏。”如果你分享了完整的程序,结果可能不一样?
  • 我没有泄漏,但我确实得到了这个错误.. 在 valgrind 运行的中间。
  • 也适用于开发分支,3.11。 see results here。未检测到泄漏。
  • 好的,我隔离了这个问题。当我打印字符串时,它给了我这个错误。

标签: c string memory memory-leaks valgrind


【解决方案1】:

10 个字节不足以包含 "hello doit" 包括字符串终止符。您在这里不使用任何字符串函数,但也许还有其他代码可以使用。请展示完整的可验证示例。

您没有发布整个代码,但现在评论了 “当我打印字符串时...”(并在我输入此内容时编辑了问题)。

大小需要为 11。你还需要复制终结符。

chars = realloc (chars, 11);
memcpy(chars, hey, 11);

【讨论】:

  • 所以 printf 使用完整的字符串?
  • 当它到达字符串终止符 \0 时,它会停止输出,这是您没有留出空间或复制的。因此它跑过了字符串的末尾并给了你奇怪的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-11
  • 1970-01-01
  • 2012-01-30
  • 1970-01-01
  • 2021-01-03
  • 1970-01-01
  • 2010-12-20
相关资源
最近更新 更多