程序何时会在缓冲区溢出情况下崩溃
#include<stdio.h>
#include<stdlib.h>
main() {
char buff[50];
int i=0;
for( i=0; i <100; i++ )
{
buff[i] = i;
printf("buff[%d]=%d\n",i,buff[i]);
}
}
分配的前 50 个字节会发生什么情况,程序什么时候会崩溃?
我在带有 gcc a.out 的 UBUNTU 中看到它在我 99 时崩溃
>>
buff[99]=99
*** stack smashing detected ***: ./a.out terminated
Aborted (core dumped)
<<
我想知道为什么在 for 循环中的 buff[51] 处发生分配时这不会崩溃?