1
2
3
4
5
|
void
func()
{
char
b[2]={0};
strcpy
(b,
"aaaa"
);
}
|
以下说法那个正确()
正确答案: A 你的答案: C (错误)
Debug版崩溃,Release版正常
Debug版正常,Release版崩溃
Debug版崩溃,Release版崩溃
Debug版正常,Release版正常
因为在Debug中有ASSERT断言保护,所以要崩溃,而在Release优化中就会删掉ASSERT,所以会出现正常运行。
但是不推荐如此做,因为这样会覆盖不属于自己的内存,这是搭上了程序崩溃的列车,即未定义行为,出现什么后果都有可能的,程序员的职责是保证不越界,而不是追问越界之后会发生什么。就像生活中违法不一定立刻被抓,但是迟早是要被抓的。