哨兵位 :VS中哨兵位为8位;当数组越界时便会触发;
哨兵位的目的——————————栈保护
发生情况 数组越界时 :
数组越界问题在编译期间特别不容易发现,在有些情况下编译器只需要预估数组元素的大小,并不会真实访问数组元素,这时接可能在运行期间发生错误。
1 .所有需要自动分配内存的数组都放(创建)在栈上,
栈的增长方式为 高地址——————>低地址
所以数组在栈上存储时,首元素放在高地址
特殊的 :
数组在定义时,长度并不会受限制,换句话说,数组分配的内存大小与栈的大小无关。
2 数组 在编译时预估分配内存的大小
在运行时,真正分配内存,初始化
#define _CRT_SECURE_NO_WARNINGS 1
#include"windows.h"
#include"stdio.h"
int main()
{
int i = 0;
int arr[9] ;
for (; i <= 9; i++) {
arr[i] = 0;
printf("hello world\n");
}
system("pause");
return 0;
}
程序将会崩溃 ,因为执行陷入死循环
哨兵位在内存中