以上都是用来分配内存的函数,其中第一个和第三个用法非常接近,第二个较少使用,但有其自身有点,可自动初始化内存
/* ===================================================== */
//
// ◢█████◣ ◢██████◣
// ◢◤ ◥◣ ◢◤ ◥◣
// ◤ ◥◣ ◢◤ █
// ▎ ◢█◣ ◥◣◢◤ ◢█◣ █
// ◣ ◢◤ ◥◣ ◢◣ ◥◣ ◢
// ◥██◤ ◢◤ ◥◣ ◥█◤
// █ ● ● █
// █ 〃 ▄ 〃 █
// ◥◣ ╚╩╝ ◢◤
// ◥█▅▃▃ ▃▃▅█◤
// ◢◤ ◥◣
// █ █
// ◢◤▕ ▎◥◣
// ▕▃◣◢▅▅▅◣◢▃▎
//
// 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");
}