请告诉我关于以下代码,堆栈与堆的区别是什么?
int main()
{
int arr[3];
int *a;
arr [5] = 6; // out of bound but it will not give error.
arr [3000] = 8 ; //SIGSEGV
a = malloc (sizeof (int));
a[4] = 6;
a[4000] = 8; //No error
}
我知道arr是一个静态数组,当我执行arr[3000]时,我正在访问其他进程的地址,这会导致SIGSEGV错误。但是我不明白为什么a[4000]不会给我任何运行时错误,即SIGSEGV信号。
谢谢