zoukankan      html  css  js  c++  java
  • c realloc函数和malloc函数

    realloc 
    原型:extern void *realloc(void *mem_address, unsigned int newsize); 
    用法:#include <stdlib.h> 有些编译器需要#include <alloc.h> 在C++环境中,使用#include<iostream> using namespace std;
    功能:改变mem_address所指内存区域的大小为newsize长度。 
    说明:如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。 
    当内存不再使用时,应使用free()函数将内存块释放。 
    注意:这里原始内存中的数据还是保持不变的。

    举例如下:

    int *a1=(int*)malloc(2*sizeof(int));
    a1[0]=2;
    a1[1]=3;
    cout<<(int*)a1<<endl;
    a1=(int *)realloc(a1,4*sizeof(int));
    cout<<(int*)a1<<endl;
    a1[2]=4;
    a1[3]=5;
    for(int i=0;i<=3;i++)
    cout<<a1[i]<<endl;

    运行结果:

    00672DF0

    00672DF0

    2

    3

    4

    5

    详细说明及注意要点: 
    1、如果有足够空间用于扩大mem_address指向的内存块,则分配额外内存,并返回mem_address 
    这里说的是“扩大”,我们知道,realloc是从堆上分配内存的,当扩大一块内存空间时, realloc()试图直接从堆上现存的数据后面的那些字节中获得附加的字节,如果能够满足,自然天下太平。也就是说,如果原先的内存大小后面还有足够的空闲空间用来分配,加上原来的空间大小= newsize。那么就ok。得到的是一块连续的内存。 
    2、如果原先的内存大小后面没有足够的空闲空间用来分配,那么从堆中另外找一块newsize大小的内存。 
    并把原来大小内存空间中的内容复制到newsize中。返回新的mem_address指针。(数据被移动了)。 
    老块被放回堆上。 

  • 相关阅读:
    CSS之属性操作
    Python模块之sys
    Python模块之hashlib:提供hash算法
    Python模块之random:获取随机数
    Python模块之time:时间获取和转换
    Python模块之os:操作系统接口函数
    Python最牛逼内建函数之 filter:过滤
    Python最牛逼内建函数之 zip()
    Python最牛逼内建函数之 max/min()
    Python最牛逼内建函数之 map()
  • 原文地址:https://www.cnblogs.com/myyan/p/3745028.html
Copyright © 2011-2022 走看看