踩内存

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了踩内存相关的知识,希望对你有一定的参考价值。

踩内存
总会听到这个名词,但是一直都不明白其中的含义。今天来学习一下踩内存。

踩内存,总的来说,是访问了不应该访问的内存地址。尤其在C指针中。可以访问不合法的内存。

  1. 访问越界数组
    int a[10];
    int *p = a;
    int c = p[11];
    //这时变量指针p指向的是一个非法内存。已经越界了。这是越界数组访问导致的踩内存。
  2. 访问已经被free释放掉的内存
    char *a = (char *)malloc(sizeof(char) * 10);//申请内存
    char *p = a;
    char c ;
    free(a);
    c = p[1];
    //这时,指针访问已经被释放的内存块a。这是访问已经被free掉的内存导致的踩内存。
  3. 栈内存访问越界
    int b = 1;
    int a[20] = {0};
    int c ;
    int *p = a;
    c = p[20];
    //首先变量b入栈,然后申请数组a[20]入栈,p[20]已经超出了数组的合法范围,
    //这时访问的是栈中变量b的内存。访问了不合法的内存。
  4. 其它
    本次学习,内容较少,留待以后继续充实。

以上是关于踩内存的主要内容,如果未能解决你的问题,请参考以下文章

C 中的共享内存代码片段

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

通过系统调用,内核断点方法定位用户进程被内核踩内存的问题

java内存流:java.io.ByteArrayInputStreamjava.io.ByteArrayOutputStreamjava.io.CharArrayReaderjava.io(代码片段

鸿蒙内核之内存调测:动态内存池信息统计

基于共享内存SHM下的内存可见性问题踩坑