zoukankan      html  css  js  c++  java
  • realloc 用方法

    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("
    ");
    
      //由于新要求的空间过大,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("
    ");
    
      //free(p); //因为要求新的空间过大,所以就不沿用原来的地址,再释放原来的地址就吐核了;如果要求新的空间不大的话,free(p)和free(p1)哪个都可以,但只能调用其中的一个。                                                                    
      free(p1);//释放新地址的内存空间
    }
    
    
  • 相关阅读:
    vc枚举本机端口信息API
    xmpp 与服务器连接并身份验证成功
    xmpp 常见错误 一
    xmpp 环境配置
    使用宏定义创建单例
    iOS知识列表
    ios sqlite 简单使用
    关于游戏
    开通博客园博客的第一天
    如何让移动设备的宽与浏览器视图的宽保持一致
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/9157697.html
Copyright © 2011-2022 走看看