【发布时间】:2019-01-05 20:04:30
【问题描述】:
我刚刚开始学习 C。
我正在尝试编写一个函数来打开一个文件,读取一个BUFFER_SIZE,将内容存储在一个数组中,然后跟踪字符'\n'(因为我想获取输入的每一行)。
当我将BUFFER_SIZE 设置得很大时,我可以得到第一行。当我将BUFFER_SIZE 设置得相当小(比如42)时,它还不是第一行的结尾,它会在最后打印出一些奇怪的符号,但我想这是我自己的代码中的一些错误。
然而,当我将BUFFER_SIZE 设置得非常小,比如= 10,我使用-fsanitizer=address 来检查内存泄漏。它抛出了一个巨大的错误:
==90673==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6020000000fb at pc 0x000108868a95 bp 0x7fff573979a0 sp 0x7fff57397998
READ of size 1 at 0x6020000000fb thread T0
如果有人能从一般意义上解释我:
什么是 fsanitizer=address 标志?
什么是堆缓冲区溢出?
什么是地址和线程?在屏幕上看到彩色线程的标志是什么?
以及为什么它说“在地址读取大小为 1..”?
我真的很感激
【问题讨论】:
-
您的代码中存在错误。
-
@n.m.有趣的是,这确实是我提到的“我的代码”中的相同错误。我确实分配了一个额外的字节。但我没有输入 0 来确保我结束该缓冲区。 :D
标签: c memory-leaks heap-memory buffer-overflow