数组越界与编译器
用visual 2008编译如下程序时:
int main(void)
{
char a[7]; //问题就在这里,只要a数组设置的小于原字串大小就会产生问题
strcpy(a,"message");
printf("%s\n", a);
//while (1);
return 0;
}
char *strcpy(char *strDest, char const *strSrc)
{
char *address;
address = strDest;
assert((strDest != NULL) && (strSrc != NULL));
while ((*strDest++ = *strSrc++) != '\0');
return address;
}
在main函数中,用strcpy复制字符串,产生了数组越界问题。单步执行,在前面没有问题,
只在main函数结束的时候编译器弹出对话框
Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted.
不知道编译器说的是什么意思
相同的程序而用c-free编译器编译时,弹出说某地址不可写。但是有时虽然a数组设置的比较小,运行时肯定也越界,
但不报错,不知道为什么。
为什么会是在main结束时报错,而不是越界时就报错呢?