C语言中使用malloc申请内存失败分配内存后没有回收,有办法解决么?

用malloc分配内存后,用memcpy将字符串复制进去
[问题点数:40分,结帖人asdk77]
本版专家分:0
结帖率 87.5%
CSDN今日推荐
本版专家分:76
本版专家分:22677
本版专家分:44151
2018年6月 C/C++大版内专家分月排行榜第二2018年1月 C/C++大版内专家分月排行榜第二2017年12月 C/C++大版内专家分月排行榜第二2017年8月 C/C++大版内专家分月排行榜第二
2018年5月 C/C++大版内专家分月排行榜第三2018年4月 C/C++大版内专家分月排行榜第三2018年3月 C/C++大版内专家分月排行榜第三2018年2月 C/C++大版内专家分月排行榜第三2017年11月 C/C++大版内专家分月排行榜第三2017年10月 C/C++大版内专家分月排行榜第三2017年9月 C/C++大版内专家分月排行榜第三2017年6月 C/C++大版内专家分月排行榜第三2017年5月 C/C++大版内专家分月排行榜第三2017年4月 C/C++大版内专家分月排行榜第三2017年3月 C/C++大版内专家分月排行榜第三
本版专家分:22677
本版专家分:1211
本版专家分:0
本版专家分:368097
2017年 总版技术专家分年内排行榜第一
2014年 总版技术专家分年内排行榜第二
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
本版专家分:88
本版专家分:0
结帖率 87.5%
本版专家分:626
匿名用户不能发表回复!|
CSDN今日推荐C语言中malloc函数的使用方法_百度知道
C语言中malloc函数的使用方法
如题,知道的告诉下,谢谢。
我有更好的答案
C语言中malloc是动态内存分配函数。函数原型:void *malloc(unsigned int num_bytes);参数:num_bytes 是无符号整型,用于表示分配的字节数。返回值:如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。void* 表示未确定类型的指针,void *可以指向任何类型的数据,更明确的说是指申请内存空间时还不知道用户是用这段空间来存储什么类型的数据(比如是char还是int或者...)功能:分配长度为num_bytes字节的内存块注意:当内存不再使用时,应使用free()函数将内存块释放。函数返回的指针一定要适当对齐,使其可以用于任何数据对象。关于该函数的原型,在以前malloc返回的是char型指针,新的ANSIC标准规定,该函数返回为void型指针,因此必要时要进行类型转换。实例:#include&stdio.h& #include&malloc.h&//malloc()函数被包含在malloc.h里面int main(void){ char*a=NULL;//声明一个指向a的char*类型的指针
a=(char*)malloc(100*sizeof(char));//使用malloc分配内存的首地址,然后赋值给a if(!a)//如果malloc失败,可以得到一些log
{perror(&malloc&);return-1;} sprintf(a,&%s&,&HelloWorld\n&);//&HelloWorld\n&写入a指向的地址
printf(&%s\n&,a);//输出用户输入的数据
free(a);//释放掉使用的内存地址 return0;//例2有无内存泄露?
采纳率:62%
来自团队:
(分配类型 *)malloc(分配元素个数 *sizeof(分配类型))如果成功,则返回该空间首地址,该空间没有初始化,如果失败,则返回0
本回答被提问者采纳
返回值类型为 void *,调用格式为:malloc(size),size的类型为unsigned int 。
malloc函数用来分配size个字节的存储区,返回一个指向存储区首地址的基类型为void的地址。若没有足够的内存单元供分配,函数返回空(NULL)
通过调用malloc函数所分配的动态存储单元中没有确定的初值,这个存储单元也没有名字,吸能靠指针来引用它。例:int *float *pi=(int *)malloc(2); pf=(float *)malloc(4);因为malloc函数的返回的地址为void *,在调用函数时,必须延用强制类型转换将其转换为所需要的类型。括号中的*号代表返回的是指针类型的
void *malloc( size_t size ); 该函数包含于stdlib.h和malloc.h中,分配一块内存区域,若成功则返回指向该区域的指针,否则返回NULL。下面的例子中分配了一块内存区域,然后把它释放:char *x = malloc(_MAX_PATH);
其他1条回答
为您推荐:
其他类似问题
malloc函数的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。C语言中使用malloc分配内存后没有回收,有办法解决么?_百度知道
C语言中使用malloc分配内存后没有回收,有办法解决么?
我已经创建了几次,怎么弄要?
没用free释放过
我有更好的答案
7.5 free 和 delete 把指针怎么啦? 别看 free 和 delete 的名字恶狠狠的(尤其是 delete) ,它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。 用调试器跟踪示例 7-5,发现指针 p 被 free 以后其地址仍然不变(非 NULL) ,只是该地址对应的内存是垃圾,p 成了“野指针” 。如果此时不把 p 设置为 NULL,会让人误以为 p 是个合法的指针。 如果程序比较长,我们有时记不住 p 所指的内存是否已经被释放,在继续使用 p 之前,通常会用语句 if (p != NULL)进行防错处理。很遗憾,此时 if 语句起不到防错作用,因为即便 p 不是 NULL 指针,它也不指向合法的内存块。
char *p = (char *) malloc(100);
strcpy(p, “hello”);
所指的内存被释放,但是 p 所指的地址仍然不变
if(p != NULL)
// 没有起到防错作用
strcpy(p, “world”); // 出错 } 示例 7-5
p 成为野指针 7.6
动态内存会被自动释放吗?7.7
杜绝“野指针”7.8
有了 malloc/free 为什么还要 new/delete ? 7.9
内存耗尽怎么办?7.10 malloc/free 的使用要点7.11 new/delete 的使用要点 7.12
一些心得体会参考文献:高质量 C++/C 编程指南 - 林锐 2001
养成好习惯,在堆上分配的内存不用的时候要记得释放,不然它们占据的空间会越来越大,另外,保存好指针的值,否则可能永远都释放不了了。当你用free释放一片内存之后,操作系统可能不会真正的收回,当你下一次用malloc分配内存的时候如果大小刚好,它会把你刚释放掉的内存分配给你。当程序结束后,操作系统会回收所有程序所占用的内存空间,包括堆,数据段,代码段等。
程序结束 自己没. 用不着怕 除非你一直开着那个申请内存的程序.不然等你关了程序, 系统会自动回收他所申请的资源
malloc()分配后,当不再用到的时候记得用free()去释放内存,否则会一直占用内存,导致内存泄露,最后内存越来越少。重启机器后内存会释放。
不用管 程序运行结束,操作系统会自动回收提供给该程序的资源,但是有些程序可能会一直运行下去,因此要求不要忘记用free释放内存
其他2条回答
为您推荐:
其他类似问题
malloc的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。17:36 提问
C语言内存分配malloc导致的程序退出
while (1) {
p = malloc(1);
这样写最后是因为没有内存退出还是向0写入退出?怎么感觉是内存完了
按赞数排序
内存分配失败就会返回空指针
堆内存被使用完后,在申请就睡失败,p就是NULL,即地址为0写入,而这个地址是受程序保护的,无法写入因此退出
个人觉得你这个应该是会导致堆内存不够,导致程序异常退出
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐

我要回帖

更多关于 malloc 内存碎片 的文章

 

随机推荐