realloc 用方法

void* realloc(void*, n)

  • 根据n的大小,如果n比较小,就沿用原来的内存地址(也就是返回的地址就是原来的地址),在原来地址的内存空间的最后面,加上n大小的内存空间;如果n比较大,系统就不会沿用原来的内存地址,系统有新开辟一个内存空间,并把原来内存空间里存放的值复制过来,这时realloc的返回地址和原来的地址就不同了。
  • 当realloc返回的地址不是原来的地址的时候,realloc函数会释放掉原来地址的内存空间,在这种情况下,如果在realloc调用的后面,free(原来的地址),就会发生吐核(segment fault),所以,最后只需要free(新的地址)就可以了。
#include <stdio.h>
#include <stdlib.h>int main(){int *p = (int*)malloc(sizeof(int) * 5);if(NULL == p){}for(int i = 0; i < 5; ++i){*(p + i) = i;}for(int i = 0; i < 5; ++i){printf("%d ",*(p + i));}printf("\n");//由于新要求的空间过大,realloc就会释放掉原来的p指向的空间,然后再从新开辟空间,并把地址返回给p1,这时p和p1就不指向同一个地址了。int *p1 = (int*)realloc(p,sizeof(int) * 800000);for(int k = 5; k < 8; ++k){*(p1 + k) = k;}for(int i = 0; i < 8; ++i){printf("%d ",*(p1 + i));}printf("\n");//free(p); //因为要求新的空间过大,所以就不沿用原来的地址,再释放原来的地址就吐核了;如果要求新的空间不大的话,free(p)和free(p1)哪个都可以,但只能调用其中的一个。                                                                    free(p1);//释放新地址的内存空间
}

转载于:https://www.cnblogs.com/xiaoshiwang/p/9157697.html

realloc 用方法相关推荐

  1. 在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 11g 集群

    作者:Jeffrey Hunter 了解如何以低于 2,700 美元的费用在 Oracle Enterprise Linux 上安装并配置 Oracle RAC 11g 第 2 版开发集群. 本指南中 ...

  2. Java面试题大全2021版

    一.Java 基础 JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境. JRE:Java Run ...

  3. visual studio 2022配置GAMP出现realloc不能开辟空间问题和不能够创建文件夹问题及其解决方法

    visual studio 2022配置GAMP出现realloc不能开辟空间问题和不能够创建文件夹问题及其解决方法 因在处理相关数据时,需要动态给指针开辟内存,使用了realloc进行开辟内存空间, ...

  4. php调用C代码的方法详解

    在php程序中需要用到C代码,应该是下面两种情况: 1 已有C代码,在php程序中想直接用 2 由于php的性能问题,需要用C来实现部分功能 针对第一种情况,最合适的方法是用system调用,把现有C ...

  5. Linux下C++中可使用的3种Hook方法

    Hook即钩子,截获API调用的技术,是将执行流程重定向到你自己的代码,类似于hack.如使程序运行时调用你自己实现的malloc函数代替调用系统库中的malloc函数.这里介绍下Linux下C++中 ...

  6. Load 方法 暨 程序的加载顺序

    前言 众所周知,App 的入口是 main 函数,而在此之前,我们了解到的是系统会自动调用 load 方法.而且是先调用父类的,再是自己的,最后才是分类的.而为什么是这样呢,不清楚. 下面所有的 lo ...

  7. 【 C 】关于学习 realloc 踩过的那些坑

    在写这篇博文的最后:[ C ]动态内存分配案例分析,我给出了一个不痛不痒的案例,可是运行的结果我一开始没有仔细看,细看让我大吃一惊,这篇博文中我也说了一个大吃一惊的终极原因,那就是我菜!!! mall ...

  8. 在应用程序中替换Linux中Glibc的malloc的四种方法

    打算优化系统的内存分配,接管glibc提供的内存管理,但是整个工程的代码量很大,使用malloc.realloc.calloc和free的地方到处都是,如果自己写好的接口需要重命名所有的调用,先不说工 ...

  9. 《代码阅读方法与实践》阅读笔记一

    第三本书我选择了代码阅读方法与实践,说实话,觉得三本书里面最好的就是这一本书了,每一段话,每一段代码打偶让我受益匪浅.下面是我的收获: 1.1为什么以及如何阅读代码  将代码作为文献:要养成一个习惯, ...

最新文章

  1. mongodb3 分片集群平滑迁移
  2. Java jar 如何防止被反编译?代码写的太烂,害怕被人发现
  3. [网络安全提高篇] 一〇八.Powershell和PowerSploit脚本渗透详解 (1)
  4. 数组指针和指针数组,函数指针和指针函数,常量指针和指针常量,常量引用
  5. 企业级系统架构设计技术与互联网应用技术结合主题一 大规模并发性能问题探讨...
  6. 猜数字游戏python程序_python经典小程序:猜数字游戏
  7. 《大道至简》第二篇读后感
  8. 最适合画画的平板电脑_平板电脑性价比排行 2020年最值得入手的平板
  9. java发送post请求json格式_go语言web开发框架学习系列二:Get、Post、Put等请求及数据返回格式...
  10. Django之forms组件使用
  11. win7右键菜单不见解决办法
  12. 帆软帮助文档_聚焦商业智能主赛道,帆软如何取得里程碑式突破
  13. python三菱fx3u通讯_【案例】三菱FX3UPLC的无线通讯讲解
  14. 进程proc文件介绍
  15. SPARC架构下的反汇编(二)——准备知识
  16. FFMPEG保存视频流数据至本地(rtsp转mp4)
  17. 软件测试安全性翻译成英语,软件可靠性测试充分性准则,software reliability testing adequacy criterion,音标,读音,翻译,英文例句,英语词典...
  18. Python手册(Machine Learning)--statsmodels(Regression)
  19. 2019年西南交大计算机专硕
  20. 魔点人脸识别闸机系统落地郑州中心客运站

热门文章

  1. 每日一题(30)—— 局部变量能否和全局变量重名?
  2. Linux C高级编程——网络编程之UDP(4)
  3. .bat是什么语言_简单说说当我们打开网页时,浏览器到底做了什么?
  4. 我们并没有觉得MapReduce速度慢,直到Spark出现
  5. [编程启蒙游戏] 2. 奇偶数
  6. oracle字符串使用函数,Oracle常用函数介绍之一(字符串)
  7. 分段线性插值c语言程序_【短道速滑】OpenCV中cvResize函数使用双线性插值缩小图像长宽大小一半时速度飞快(比最近邻还快)之异象解析和自我实现。...
  8. 一个长文档里,包括封面、不同的章节,如果我想封面不设置页眉页脚,每个章节的页眉都不同,请问应该如何设置页眉页脚?
  9. 利用nginx建立windows软连,实现IP访问文件
  10. Python中对象名称前单下划线和双下划线有啥区别