代码拉取完成,页面将自动刷新
同步操作将从 狐皮先生/c语言文档 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
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.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。