静态区、栈、堆(堆栈 == 栈 != 堆)
静态区:保存全局变量和static变量,在整个程序的生命周期内部都存在,在编译的时候就已经被分配
栈:保存局部变量,栈上的内容只在函数的局部范围内存在,函数运行结束的时候,便自动被销毁,效率高,但是空间有限
堆:由malloc系列函数或new操作符分配的内存,到运行free和delete时结束,使用灵活、空间大,但是易出错常见的内存错误
- 指针没有指向一块合法的内存
解决方法:用malloc申请一块内存 - 为指针分配内存太小
注意malloc()里面的表达 - 内存分配成功,但未初始化
用memset()给内存初始化,一般为0 - 内存越界
- 内存泄漏
内存泄漏来源是堆上的内存,由malloc系列函数或new分配的内存,用完之后没有用free或delete进行释放 - 内存已经释放,但是继续用通过指针来使用
- 指针没有指向一块合法的内存
一般使用的过程
初始化指针(置NULL eg:char* p = NULL;)
分配内存(malloc(size), 应注意内存大小)
初始化(memset())
释放指针(free()或delete)
指针重新置NULL
C 内存管理
最新推荐文章于 2024-09-22 21:02:49 发布