当前位置:   article > 正文

C语言什么是内存越界?什么是内存泄露?⼆者是如何产⽣的?

C语言什么是内存越界?什么是内存泄露?⼆者是如何产⽣的?

一、问题

        什么是内存越界?什么是内存泄露?分别是如何造成的?

二、解答

1. 内存越界

        内存越界就是成功地分配了内存,并且⼰经初始化,但是在操作过程中越过了内存的边界。应⽤如下代码对内存越界进⾏说明。

  1. char *pl = "helloworld";
  2. char *p2 = (char *)malloc(sizeof(char)*strlen(pl));
  3. strcpy(p2,p1);

        字符串 p1 占⽤11个字节,其中包括最后的结束标识符“ \0 ”。但是在为 p2 分配内存空间时,⽤ strlen(p1) 得到的字符串 p1 的长度为10个字节。因此,将 p1 中字符串赋予 p2 时出现了越界。

说明:

        内存越界问题通常出现在数组和指针的操作上。

 2. 内存泄露

        如果在分配了内存空间并使⽤完后,没有及时地释放掉指针所占⽤的内存空间,⽽再次使⽤这个指针时又为其分配内存。

        如此操作,有限的内存空间就会被消耗,逐渐减少, 这种现象称之为内存泄露。涉及释放内存的就是使⽤ malloc( ) 等函数分配的内存,因此会 产⽣泄露的内存是堆上的内存。

三、总结

        定义了⼀个指针后,要及时为这个指针分配内存空间,这是为了防⽌野指针的出现。 在不使⽤这块内存后,要及时释放掉该内存,这不⽌是为了节省空间,更重要的是为了防⽌内存泄露。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/613054
推荐阅读
相关标签
  

闽ICP备14008679号