动态分配内存补充 realloc
2015-12-15 10:35
204 查看
当再次在原来申请的内存基础上再加内存的时候用realloc,如果第一次分配的内存后面存储地方够用,则连着原来的申请,如果不够用,就重新找到一块够用的地方,然后把原来的复制过去
int main(int argc, const char * argv[]) {
char *name = NULL;
int total = 0;
while(1){
char a = getchar();
if (a == '\n'){
break;
}
if (name ==NULL) {
name = (char*)malloc(1*sizeof(char)); //第一次进入的时候是用malloc分配空间
if (name ==NULL) {
exit(EXIT_FAILURE);
}
}else{
char * temp=NULL;
temp = (char *)realloc(name, (total+1)*sizeof(char)); //再次进入的时候使用realloc分配空间
if (temp ==NULL) {
free(name); //如果第二次之后申请内存失败,要释放掉之前申请的内存,所以先用temp来申请,如果没申请成功,释放掉原来的name。
exit(EXIT_FAILURE);
}
name =temp;
}
*(name +total) = a; // 依次存放进去
total++;
}
printf("%s\n",name);
free(name);
return 0;
}
int main(int argc, const char * argv[]) {
char *name = NULL;
int total = 0;
while(1){
char a = getchar();
if (a == '\n'){
break;
}
if (name ==NULL) {
name = (char*)malloc(1*sizeof(char)); //第一次进入的时候是用malloc分配空间
if (name ==NULL) {
exit(EXIT_FAILURE);
}
}else{
char * temp=NULL;
temp = (char *)realloc(name, (total+1)*sizeof(char)); //再次进入的时候使用realloc分配空间
if (temp ==NULL) {
free(name); //如果第二次之后申请内存失败,要释放掉之前申请的内存,所以先用temp来申请,如果没申请成功,释放掉原来的name。
exit(EXIT_FAILURE);
}
name =temp;
}
*(name +total) = a; // 依次存放进去
total++;
}
printf("%s\n",name);
free(name);
return 0;
}
相关文章推荐
- 【转】eclipse luna 无法安装veloeclipse问题
- TweenMax参数说明
- 关于使用base36的技巧 生成 优惠券兑换码的相关讨论
- iOS开发中善用日志记录工具
- CSS高级选择器:nth-child()应用大全
- JavaScriptc创建对象的几种模式
- 一些简单的硬件知识
- 杭电ACM1564(奇偶规律)
- 【重拾】nodeJS模块查找
- Android Studio 快捷键
- iOS 开发常用技巧、推送
- MySQL中type=MyISAM出错解决方法
- 解决ScrollView嵌套ListView和GridView冲突只显示一行Item的高度的方法
- 关于Java集合框架面试题(含答案)下
- Controller不是tableView的垃圾桶
- Uip在STM32平台移植之建立UDP链接
- MiniUI——表格分组
- 数据库原理 知识点总结
- oracle 转让日期格式字符串
- CentOS6.5安装MATLAB