• 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指针。(数据被移动了)。 
    老块被放回堆上。 

  • 相关阅读:
    Beta 阶段计划
    alpha阶段总结
    冲刺第十天 12.6 THU
    冲刺第九天 12.5 WED
    冲刺第八天 12.4 TUE
    冲刺第七天 12.3 MON
    冲刺第六天 11.30 FRI
    正弦交流电有效值系数sqrt(2)的推导
    关于STM32官方FOC库函数扇区分析中’131072’系数的解释
    闭环系统零、极点位置对时间响应性能指标的影响
  • 原文地址:https://www.cnblogs.com/myyan/p/3745028.html
Copyright © 2020-2023  润新知