【发布时间】:2019-03-18 15:49:06
【问题描述】:
有人知道为什么下面的代码行会抛出 *** stack smashing detected *** 错误
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv)
{
char x[16];
strcpy(x,"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
}
但是下面的代码没有抛出?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv)
{
char x[16];
x[17] = 'a';
}
谢谢!!
【问题讨论】:
-
两种情况下的行为都是未定义的。
-
我不明白。你说的未定义是什么意思? @EOF
-
“未定义”表示任何事情都可能发生。编译器没有义务发出会崩溃的代码,也没有义务发出将实际执行越界访问的代码。 任何事情都可能发生,编译器不需要对此保持一致。例如,我的
gcc和-O3完全优化了越界访问,因此甚至完全避免了发出堆栈 cookie 代码。
标签: c gcc stack-overflow stack-smash