ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

堆栈和堆之间的区别

2019-07-13 07:50:46  阅读:173  来源: 互联网

标签:c-3 linux malloc undefined-behavior allocator


请告诉我堆栈和堆之间的区别与下面的代码

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错误.但我不明白为什么[4000]不会给我任何运行时错误,即SIGSEGV信号.

谢谢

解决方法:

不能保证这些调用中的任何一个实际写入无法访问的内存(这会触发段错误).程序有权写入该内存并且不会触发段错误,但会覆盖与您的阵列无关的其他一些内部数据.这当然可能会导致程序中其他地方的意外影响.

通常,这称为未定义行为.当你写出数组的边界时,没有任何承诺会发生什么,任何可能发生或可能不发生的事情.

标签:c-3,linux,malloc,undefined-behavior,allocator
来源: https://codeday.me/bug/20190713/1447404.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有