内存的分配方式:

1.静态存储区分配:全局变量,static变量等,在程序编译时已经分配了存储内存,在程序运行的整个期间一直存在

2.程序的堆栈上:程序的局部变量,包括程序的形参等,只存在于程序的运行期间

3在堆heap上分配的:动态内存分配,malloc或者new

常见的内存错误:

(1)内存分配未成功,却使用它了。记得malloc时要判断返回的是否是NULL,若为NULL则说明动态分配内存失败

(2)内存分配成功了要记得初始化,malloc完了

calloc :(元素个数,元素大小),calloc在分配完内存后会初始化为0

realloc:(指针,新的大小),修改已经分配过的内存的大小,扩大或者缩小,若是扩大会在后面添加,不会改变原来的数据

malloc:(字节大小),不会自己进行初始化

(3)内存分配成功了,但在访问时越界了,超出了分配的内存的大小

(4)忘记释放掉动态分配的内存,或者只是释放了一部分,这样函数每调用一次都会丢失一次内存,会内存泄露,最后程序崩溃

(5)已经将内存给free掉了,但是没有把指针指向NULL,变成了野指针,还在使用它,会出现不可预料的情况。

指针的参数是如何传递的

(1)不要把函数的参数为指针的作为开辟动态内存的指针

例如: void getmemory(int* ptr)

{ ptr=(int*)malloc(sizeof(int)*10);}

在这里当调用这个函数时,传入的实参时,拷贝一个指针变量ptr的值,给他,然后在函数内开辟内存时,相当于改变这个实参的值(即地址)

对于形参时没有变化了。

这里可以使用指向指针的指针或者指针的引用。

函数的return时不要返回“栈内指针”,即返回指向在程序堆栈上分配的内存,当返回时,内存被释放了,所以没有任何意义。

内存管理(——高质量程序设计语言C/C++第16章)的更多相关文章

  1. 编程精粹--编写高质量C语言代码(3):自己设计并使用断言(二)

    接着上一遍文章<<编程精粹--编写高质量C语言代码(2):自己设计并使用断言(一)>>,继续学习怎样自己设计并使用断言,来更加easy,更加不费力地自己主动寻找出程序中的错误. ...

  2. 指针,数组,字符串的区别(高质量程序设计指南C++/C语言第7章)

    指针: 指针是变量,和平时的那些变量没有本质的差异,不同的只是它的值和类型,.,即解释方式 二进制层面:指针的值是内存单元的地址,而变量是引用内存单元值的别名 语言层面:指针的值就是变量的地址. 对象 ...

  3. 编程精粹--编写高质量C语言代码(4):为子系统设防(一)

    通常,子系统都要对事实上现细节进行隐藏,在进行细节隐藏的同一时候.子系统为用户提供了一些关键入口点. 程序猿通过调用这些关键的入口点来实现与子系统的通信.因此假设在程序中使用这种子系统而且在其调用点加 ...

  4. 内存管理 垃圾回收 C语言内存分配 垃圾回收3大算法 引用计数3个缺点

    小结: 1.垃圾回收的本质:找到并回收不再被使用的内存空间: 2.标记清除方式和复制收集方式的对比: 3.复制收集方式的局部性优点: https://en.wikipedia.org/wiki/C_( ...

  5. 高质量程序设计指南C/C++语言——内存管理

    • free()和delete只是把指针所指的内容给释放掉,并没有把指针本身删掉.指针被free()或delete以后其地址仍然不变(不等于NULL),只是该地址对应的内存是垃圾——p成了野指针.如果 ...

  6. 高质量程序设计指南C/C++语言——C++/C程序设计入门

    1.在C++/C中,全局变量(extern或static)存放在程序的静态数据区中,在程序进入main()之前创建,在main()结束之后销毁,因此在我们的代码中根本没有机会初始化它们,于是语言及其实 ...

  7. 《高质量程序设计指南:C++/C语言》面试题整理

    本试题仅用于考查C++/C程序员的基本编程技能.内容限于C++/C常用 语法,不涉及 数据结构. 算法以及深奥的语法.考试成绩能反映出考生的编程质量以及对C++/C的理解程度,但不能反映考生的智力和软 ...

  8. 高质量程序设计指南C/C++语言——C++/C程序设计入门(4)

    *switch结构的break语句只是一个“jmp”指令,其作用就是跳到switch结构的结尾处 *标准C++/C语言提供3种循环:do/while.while和for,它们都在条件表达式为TRUE( ...

  9. 高质量程序设计指南C/C++语言——malloc/free使用要点

随机推荐

  1. File.Exists 文件不存在 Or FileNotFoundException

    标题警告,本文仅限走投无路,最终可能的一个问题导致. 最开始出现在找不到文件,测试发现: 看起来毫无毛病 而后各种测试: 注意看,第一行跟第三行一模一样 发现[@"‪‪‪]这两个字符有毒,如 ...

  2. jmeter的JVM参数设置

    JMeter用户可根据运行的计算机配置,来适当调整JMeter.bat中的JVM调优设置,如下所示: set HEAP=-Xms512m -Xmx512m set NEW=-XX:NewSize=12 ...

  3. PHP memcache扩展安装 for Windows

    一.下载并安装memcached服务器端软件    1.下载memcached软件 32位下载地址: memcached-win32-1.4.4-14.zip(直接下载),memcached-win3 ...

  4. jq打印

    1.引入jQuery.print.min.js 2.将需要打印的东西用div包起来 3. $(".printDiv").print();

  5. 配置maven报错 the java_home environment variable is not defined correctly ......

    the java_home environment variable is not defined correctly This environment variable is needed to r ...

  6. C++关键字(保留字)

    C++ 关键字 点击下表以进入具体释义 __abstract 2 __alignof Operator __asm __assume __based __box 2 __cdecl __declspe ...

  7. 洛谷 P4073 [WC2013]平面图

    #include<bits/stdc++.h> using namespace std; ; typedef long double LD; ; ); int dcmp(LD x){ret ...

  8. windows本机域名配置

    路径: C:\Windows\System32\drivers\etc打开hosts文件如下: # Copyright (c) - Microsoft Corp. # # This is a samp ...

  9. 特殊权限和facl

    目 录 第1章 FACL访问控制    1 1.1 FACL简介    1 1.2 getfacl命令查看acl权限    1 1.3 setfacl设置文件的cal权限    1 1.4 批量添加a ...

  10. linux常用过滤日志命令

    #过滤nginx访问日志awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr -k1 | head -n 10 ...