1 Star 0 Fork 1

一一哥/c语言文档

forked from 狐皮先生/c语言文档 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
动态内存2.txt 1.69 KB
一键复制 编辑 原始数据 按行查看 历史
狐皮先生 提交于 2023-01-22 23:38 +08:00 . 1.22
1.malloc realloc calloc //调用系统接口
2.int*p=(int*)malloc(40);
free只能释放动态内存空间
3.如果malloc(0)错误的 错误信息取决于编译器 故意找茬
4.calloc(元素个数,元素大小)
5.malloc和calloc都是在堆上申请空间,都需要free
malloc和calloc区别
malloc 不初始化,直接返回开辟空间首地址
calloc 初始化所有大小都为0,然后再返回开辟空间首地址
calloc(元素个数,元素大小);
malloc(大小);
6.realloc(重新开辟空间大小)
void*realloc(char*ptr,size_t new)
ptr 已开辟空间地址
new 新的大小;
realloc() 两种开辟情况;
1.后面有足够空间 就原地扩大旧的空间,返回旧的地址;
2.后面没有足够的空间,开辟新的空间大小,然后旧的数据拷贝到新的内存,然后在释放旧的空间,返回新的地址
为了防止空间申请失败p数据丢失,先用新的指针变量接收,如果newp!=null 在把newp赋值给p;
如果ptr=null 那么realloc==malloc;realloc(null,40)等于 malloc(40);
free()错误类型
1.
int a=10;
int*p=&a;
free(p)//不可以释放非动态开辟的空间
2.
p++
free(p)//释放要在首地址释放;
3.
free(p)//1次释放
free(p) //2次释放
两次释放会出问题
但是在第一次释放后p置空 p=NULL;
就可以释放第二次,但不会处理空指针;
4.
忘记释放空间
5. 函数在结束时栈的内存空间销毁,还给内存;如果后面访问地址中内容将非法访问;
ps:函数中局部变量一出函数所创建的空间销毁;而malloc 常量 stitic之类不会销毁
6.
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/sunyiyi/c-language-document.git
git@gitee.com:sunyiyi/c-language-document.git
sunyiyi
c-language-document
c语言文档
master

搜索帮助