【发布时间】:2020-12-30 23:18:27
【问题描述】:
所以我的 gcc 编译器说:
=================================================================
==831==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x60c000001d3c at pc 0x7fcb29c87075 bp 0x7ffe0bf63e70 sp 0x7ffe0bf635e8
READ of size 121 at 0x60c000001d3c thread T0
我将一个 char *list = argv[1] 传递给一个函数。会不会是这个原因?
【问题讨论】:
-
消毒剂说你有缓冲区溢出,而不是内存泄漏。顺便说一句,有两个变量名为
sl和s1可能会造成混淆。 -
s1也从未使用过 -
WriteAfterMathData中的缩进与大括号{...}不匹配。这是您的真实代码还是您不小心删除了大括号?在不知道结构定义、如何分配内存以及传递给函数的具体内容的情况下,很难找出问题所在。 -
@Blastfurnace 那么我应该在哪里看?我通过 char *name = argv[4]; 在 main 中读取了一个动态值;并将其作为参数传递给 RemoveCity。你认为这可能会导致这种情况吗?至于其他人: fclose 在迭代之外,但由于某些原因我无法编辑我的帖子(它说它现在主要包含代码)。 s1 仅用于调试目的。
-
您可能读/写超出了数组的末尾,或者您的指针无效。我会在调试器中运行代码,在
fprintf处设置断点,然后查看变量。
标签: c gcc memory-leaks