堆里面的数据越界访问不为空,栈里面的数据越界访问为空 这是为什么,还有就是上面三个有什么区别?
在进程的虚拟内存中 堆和栈
堆是 用来存储全局变量和动态产生的数据。
栈是 用于保存局部变量和实现函数/过程调用。
如果只是纯软件意义上的 段 段只是虚拟内存地址空间中用于保存数据的区域
谢谢 竟然还有图 好惊喜
所谓的代码段、(堆栈段)栈段、数据段,不过是我们(程序员)对内存的一种逻辑划分
栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
简单的说:栈是计算机管理,堆是程序员管理
int *q ; int *p = (int *)(malloc(sizeof(int)));
这个输出*(q+1)值不为0 *(p+1)值为0
为什么?
int p = (int *)(malloc(sizeof(int)));*(p+1)这里完成了指针的初始化,malloc是申请内存,分配的是一个空指针
一定要注意下指针的初始化,要么用malloc,要么赋值 int a;*q=a指针没有初始化是不能用的,我记得有我们C++的期中考试第一题就是考的这个
我的运行环境时 mac 装的 zsh shell 用的 vim编辑器 不初始化 不会抱错