b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

malloc,alloc,realloc之间的异同

电脑杂谈  发布时间:2020-03-24 08:04:47  来源:网络整理

c calloc malloc_malloc realloc calloc_malloc函数calloc

这三个函数的声明是:

void *重新分配(void * ptr,未签名的newsize);

void * malloc(无符号大小);

void * calloc(size_t numElements,size_t sizeOfElement);

所有内容都在stdlib.h库中. 它们的返回值是请求系统分配的地址. 如果请求失败,则返回NULL.

malloc realloc calloc_c calloc malloc_malloc函数calloc

malloc和calloc的区别是1个块和n个块之间的区别:

malloc调用的格式为(类型*)malloc(大小): 在内存的动态存储区域中分配一个长度为“ size”的连续区域,并返回该区域的第一个地址.

calloc调用形式为(type *)calloc(n,size): 在内存的动态存储区域中分配n个“大小”字节的块,并返回第一个地址.

realloc调用的形式是(type *)realloc(* ptr,size): 将ptr内存大小增加到size. (它也可以减少,减少的内容消失).

另一个不能直接看到的区别是malloc仅分配内存,而不能初始化获取的内存,因此新内存的值将是随机的. 动态分配内存后,Calloc会自动将此内存空间初始化为零.

malloc函数calloc_c calloc malloc_malloc realloc calloc

重新分配要注意的一个细节:

无非就是扩展现有内存.

char * p = malloc(1024);

char * q =重新分配(p,2048);

if(p!= q){

malloc realloc calloc_malloc函数calloc_c calloc malloc

免费(p);

}

现在的问题是我们应该如何处理指针p. 一开始,根据我最直观的理解,如果只是p = NULL;. 最后,仅需要释放q的空间.

因为我最近正在打包. 在单元测试期间发现了结果. 有时当我使用free(q);时会出错. 所以我很沮丧.

稍后,在仔细跟踪之后,我发现重新分配完成后,q和p的指针地址相同. 但有时会有所不同.

c calloc malloc_malloc函数calloc_malloc realloc calloc

仔细检查信息. 我得到以下信息:

1. 如果当前的连续内存块足以进行重新分配,则只需扩展p指向的空间并返回p的指针地址即可. 此时,q和p指向相同的地址.

2. 如果当前的连续内存块不够长malloc realloc calloc,请找到另一个足够长的位置,分配一块新的内存q,然后将p指向的内容复制到q,然后返回q. 并删除p指向的内存空间.

这意味着realloc有时会生成一个新的内存地址malloc realloc calloc,有时却不会. 这样分配完成之后. 我们需要确定p是否等于q. 并进行相应处理.

这里需要注意的一点是避免p = realloc(p,2048);重新分配分配失败后,这可能导致p指向的内存地址丢失.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-150398-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...