realloc,calloc和HeapReAlloc区别

以上都是用来分配内存的函数,其中第一个和第三个用法非常接近,第二个较少使用,但有其自身有点,可自动初始化内存


/* ===================================================== */
//	
//    ◢█████◣               ◢██████◣
// ◢◤             ◥◣         ◢◤             ◥◣ 
// ◤                 ◥◣     ◢◤                 █ 
// ▎      ◢█◣       ◥◣◢◤       ◢█◣       █
// ◣     ◢◤  ◥◣               ◢◣   ◥◣   ◢ 
// ◥██◤   ◢◤                   ◥◣   ◥█◤
//          █   ●               ●    █ 
//          █   〃       ▄       〃   █ 
//           ◥◣       ╚╩╝       ◢◤ 
//             ◥█▅▃▃   ▃▃▅█◤ 
//               ◢◤       ◥◣  
//               █           █  
//             ◢◤▕       ▎◥◣
//           ▕▃◣◢▅▅▅◣◢▃▎
//            
//                 Author : Wangxu
//            Create Date :				
//            Description : 
//
/* ===================================================== */	

// realloc,calloc,HeapReAlloc区别

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
	char* p = (char*)malloc(16);

	// 能就地分配,则就地分配
	// 不能就地分配,转移到其他地方分配,保留数据
	p = (char*)realloc(p,50);
	p = (char*)realloc(p,1024 * 1024 * 50);
	strcpy(p,"123456789");

	HANDLE hHeap = ::HeapCreate(0,0,0);
	char* q = (char*)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,16);

	// 能就地分配,则就地分配
	// 不能就地分配,如指定HEAP_REALLOC_IN_PLACE_ONLY,返回NULL
	q = (char*)HeapReAlloc(hHeap,HEAP_REALLOC_IN_PLACE_ONLY,q,50);
	q = (char*)HeapReAlloc(hHeap,HEAP_REALLOC_IN_PLACE_ONLY,q,1024 * 1024 * 50);
	DWORD dwErr = ::GetLastError(); // dwErr = 8

	// 两个参数相乘指定长度,内存自动初始化为0
	char* s = (char*)calloc(2,10);
	strcpy(s,"abcdefghijklmnopg");

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值