C语言 realloc为什么要有返回值,realloc返回值具体解释/(解决随意长度字符串输入问题)。
在C语言操作中会用到大量的内存操作,当中非经常常使用的一个是realloc().
由字面意思能够知道,该函数的作用是用于又一次分配内存。
使用方式例如以下:
NewPtr=(数据类型*)realloc(OldPtr,MemSize)
当中OldPtr指向 待又一次分配内存的指针。
NewPtr指向 新分配空间的指针。
MemSize为 分配后的空间大小。
该函数的使用涉及下面几个问题:
1.不同情况下的返回值
2.OldPtr指向的内存会不会自己主动释放
3.OldPtr和NewPtr各自是什么内容,他们有什么关系
要解答这个问题,能够从函数的动作流程出发来看:
该函数依据内存是否满足函数需求,完毕下面3个动作之中的一个:
1.检查OldPtr指向的内存块后面的可用内存是否满足本次realloc的需求,假设满足,则将尾部的可用内存也分配给该内存块——指针指向位置不变,内存块内容不变,指向内存块扩大。该情况下,返回值NewPtr = OldPtr;
2.假设OldPtr指向内存块后面的可用内存不够realloc的需求。则完毕下面三个步骤<a>将在可用内存中又一次分配一段MemSize大小的内存,并将这段内存的開始地址返回给NewPtr。<b>将OldPtr内存块的内容拷贝到NewPtr内存块。<c>OldPtr的值不变,但其指向的内存块被释放(注意:是自己主动释放,不用主动调用free)。
笔者某次运行动作2之后的情况如图:
图中程序的作用是:随意长度字符串的输入——每轮循环输入一个字符,将该字符追加于之前输入的字符之后,使其构成一个字符串,并对应增大该字符串所占领的内存空间。
本人依次输入了abcd....
在输入字符abc的时候,当轮循环运行realloc之后的结果是:1.Str和NewStr的值同样,为0x00751cb8。2.其指向的内容一致,为“abc”
在输入到字符d的那一轮循环,运行realloc之后的结果是,1Str的值和NewStr的值不同了。2同一时候能够发现Str指向的内容被重置为“铪铪铪铪铪铪……”
查看其相应内存单元能够发现,将被free重置后的内存 0xee 0xfe 0xee 0xfe……的序列,例如以下图所看到的。
3.假设整个堆其中都没有不论什么一处的内存可以满足realloc的需求。则此次分配失败,返回值为NULL。
结论:在程序中realloc使用中,将OldPtr和NewPtr使用同一个指针是不妥的。使用截图相应程序中的做法较为妥当。既然可以避免分配失败返回NULL之后丢失原有指针。也能同一时候得到旧指针和新指针指向的内存块。
C语言 realloc为什么要有返回值,realloc返回值具体解释/(解决随意长度字符串输入问题)。的更多相关文章
- SpringMVC Ajax返回的请求json
的方式来解决在中国字符串乱码问题
1.org.springframework.http.converter.StringHttpMessageConverter类是类处理请求或相应的字符串.和默认字符集ISO-8859-1,所以当返回 ...
- Go语言核心之美 4.3-多返回值
在Go语言中.函数能够有多个返回值,这个特性我们已经在之前的样例见过非常多,非常多标准库函数都会返回两个值,一个是期望得到的函数执行结果,另外一个是函数出错时的错误值. 以下的程序是findlinks ...
- shell函数(调用、返回值,返回值获取)
Shell函数返回值,常用的两种方式:return,echo 1) return 语句shell函数的返回值,可以和其他语言的返回值一样,通过return语句返回.示例1: [devadmin@swa ...
- Docs-.NET-C#-指南-语言参考-关键字-内置类型-值类型:值类型的功能
ylbtech-Docs-.NET-C#-指南-语言参考-关键字-内置类型-值类型:值类型的功能 1.返回顶部 1. 值类型(C# 参考) 2018/11/26 有两种值类型: 结构 枚举 值类型的主 ...
- 【C语言学习笔记】C语言函数执行成功时,返回1和返回0,究竟哪个好?
基本上,没有人会将大段的C语言代码全部塞入 main() 函数,更好的做法是按照复用率高,耦合性低的原则,尽可能的将代码拆分不同的功能模块,并封装成函数.C语言代码的组合千变万化,因此函数的功能可能会 ...
- 调试台自动多出现一个'' ,我 用uploadify上传图片时,在给页面写入一个返回值为图片名称的变量的值的时候值的前面始终多出现一个''
对你有助请点赞,请顶,不好请踩------送人玫瑰,手留余香! 15:54 2016/3/12用uploadify上传图片时,在给页面写入一个返回值为图片名称的变量的值的时候值的前面始终多出现一个' ...
- <转>SQL Server返回最后一个标识值的三个函数:IDENT_CURRENT、@@IDENTITY、SCOPE_IDENTITY
MSDN对官方解释:这三个函数都返回最后生成的标识值. 但是,上述每个函数中定义的“最后”的作用域和会话有所不同. 1.IDENT_CURRENT 返回为某个会话和当前作用域中的指定表生成的最新标识值 ...
- C语言atan2()函数:求y/x的反正切值
头文件:#include <math.h> atan2() 函数用于求 y / x 的反正切值.其原型为: double atan2(double y, double x); [参数 ...
- 用file上传文件时,浏览器返回值总是自动添加<pre>的解决办法
在返回的JSon字符串里面总是莫名其妙的添加了<pre>标签,例如返回内容为"ok",在浏览器里面就变成了"<pre style="word- ...
随机推荐
- Android 系统稳定性 - ANR(一)
文章都为原创,转载请注明出处,未经允许而盗用者追究法律责任.很久之前写的了,留着有点浪费,共享之.编写者:李文栋 如果你是一个Android应用程序开发人员,你的人生中不可避免的三件事情是:死亡.缴 ...
- 用Swift完成不同View Controller之间的切换
之前用objective-c开发时,页面之间的切换很容易.其实用swift没有很大的变化,如果你是用storyboard完成的界面,基本上是同样的方式,只不过在代码部分写成swift风格的就行了. 今 ...
- hdu 4975 A simple Gaussian elimination problem.(网络流,推断矩阵是否存在)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4975 Problem Description Dragon is studying math. One ...
- 让你的 Qt 桌面程序看上去更加 native(一共六篇)
<让你的 Qt 桌面程序看上去更加 native>是一个系列文章.在这个系列中,你将会了解到如何让你的 Qt 桌面应用程序看上去更加 native.这里,我假设你已经清楚如何使用 Qt 编 ...
- asp.net用Zxing库实现条形码输出
原文 asp.net用Zxing库实现条形码输出 这个简单的问题,困扰了我将近两个小时,主要是再官方文档上没有找到demo,那只能用搜索引擎了,看看其他程序员写的程序,但是发现处处是坑,看了四五个例子 ...
- Cubieboard4卡片式电脑
Cubieboard4 also named CC-A80, is a open source mini PC or single board computer which has ultra-pow ...
- uva 10313 Pay the Price(完全背包)
题目连接:10313 - Pay the Price 题目大意:有0~300这300种价值的金额. 现在可能给出参数: 1个:n, 输出可以组成价值n的方式的个数. 2个:n, a输出用个数小于a的价 ...
- 业余写的一个播放器SDK,求点意见
好久没写博客了 现大致花了半年时间私下写一个音频SDK,想请csdn的达人提点意见,看看还需要增加哪些功能 我对这个的定位如下: 可以在游戏开发中播放音乐,作为一般的音频播放器后端,作为音频编辑器后端 ...
- 利用内容提供者插入sms(装B程序)
1.sms的权限配置 <uses-permission android:name="android.permission.READ_SMS"/> <uses-pe ...
- windows/Linux下安装maven
Linux下安装maven 1.首先到Maven官网下载安装文件,目前最新版本为3.0.3,下载文件为apache-maven-3.3.9-bin.tar.gz,下载可以使用wget命令: 2.进入下 ...