![]() |
1
3
这只是
undefined behavior
在分配的内存范围之外进行写入。它现在可能起作用,但不能指望它起作用。这个
C99 draft standard
见附件
请注意该部分
|
![]() |
2
3
真正的原因很可能是,由于您在函数调用中,您只是覆盖了堆栈的内容,并且在尝试将字符写过堆栈底部之前,您实际上无法访问不属于自己的内存。即使它没有崩溃,但这几乎总是很糟糕的,因为您覆盖了程序出于某种原因放在那里的值。毕竟,如果每次重写缓冲区时总是崩溃,那么缓冲区溢出错误就永远不会发生,我们知道它们确实会发生。
例如,您的堆栈可能正在向下增长。当您进行函数调用时,您可能会将寄存器值、返回地址、参数值和其他东西放在堆栈中。然后,也只有到那时,你的6个字节
C的原因是,你只是有未定义的行为,发生了一些你甚至不应该试图理解的奇怪事情。 |
![]() |
Xirema · 如何正确编写运算符的R值重载 7 年前 |
![]() |
Mário Feroldi · 在运行时调用代码中未调用的函数 7 年前 |
![]() |
chqrlie · 所有位0都可以是整数的陷阱表示吗? 7 年前 |
![]() |
Vincent · 打印零,但不基于该条件退出循环 7 年前 |
![]() |
Dror K. · 用%p打印空指针是未定义的行为? 7 年前 |
![]() |
Bite Bytes · C中允许这种函数调用吗 7 年前 |
![]() |
K J Gor · C中strncpy的内存混淆 8 年前 |