内存的分配方式:

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时不要返回“栈内指针”,即返回指向在程序堆栈上分配的内存,当返回时,内存被释放了,所以没有任何意义。

最新文章

  1. Block对象
  2. NOIP2003 神经网络
  3. solr 5.5.1安装并配置中文分词IKAnalyzer
  4. EF联合查询的新用法
  5. 布局转换:文档流->绝对定位
  6. jQuery easyui datagrid数据绑定
  7. Java中的IP对象以及本地域名解析
  8. [转载]DOS循环:bat/批处理for命令详解 (史上虽详尽的总结和说明~~)
  9. jQuery 事件 方法
  10. ThinkPHP表单令牌验证功能详细介绍
  11. javassist:字节码编辑器工具
  12. uva 1151最小生成树
  13. mybatis 3.x源码深度解析与最佳实践(最完整原创)
  14. python,for,while循环控制
  15. 3.App Inventor 2项目导入与导出
  16. python爬取网页内容demo
  17. 利用ss-redir加速服务器上国外服务的访问
  18. angular记录
  19. Vue.js 教程
  20. ZOJ 3869 Ace of Aces

热门文章

  1. 洛谷 P1548 棋盘问题
  2. SQLite运算符
  3. MySql数据库--持续记录ing
  4. c语言 错误记录
  5. 字符串翻转(java)
  6. JS 中的事件绑定、事件监听、事件委托是什么?
  7. JetBrains系列产品激活
  8. git 超时 时长 设置?
  9. 5.1 qbxt 一测 T1
  10. 【模板】插头dp