我正在学习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的地址…”?
非常感谢 <3