malloc函數(shù)
- 原型:extern void* malloc(unsigned int size);
- 功能:動(dòng)態(tài)分配內(nèi)存;
- 注意:size僅僅為申請(qǐng)內(nèi)存字節(jié)大小,與申請(qǐng)內(nèi)存塊中存儲(chǔ)的數(shù)據(jù)類型無(wú)關(guān),故編程時(shí)需要通過以下方式給出:"長(zhǎng)度 * sizeof(數(shù)據(jù)類型)";
//動(dòng)態(tài)分配內(nèi)存,輸入5個(gè)數(shù)據(jù),并把低于60的值打印出來(lái)
#include
#include
int main()
{
int *ptr = (int *)malloc(5 * sizeof(int));//分配內(nèi)存
for (int i = 0; i < 5; i++)
{
scanf_s("%d", &ptr[i]);//輸入數(shù)據(jù)
}
int min = 60;
for (int i = 0; i < 5; i++)
{
if (min > *(ptr + i))
printf("%5d", *(ptr + i));//打印出低于60的值
}
free(ptr);
system("pause");
return 0;
}
free函數(shù)
- 原型:void free(void * ptr);
- 功能:搭配malloc()函數(shù),釋放malloc函數(shù)申請(qǐng)的動(dòng)態(tài)內(nèi)存;
- 注意:對(duì)于free(ptr),若ptr為NULL,則可進(jìn)行多次釋放,若ptr是非空指針,則free對(duì)ptr只能進(jìn)行一次操作,否則程序?qū)⒈罎ⅲ?/li>
- 示例:見malloc函數(shù);
- 結(jié)果:見malloc函數(shù);
realloc函數(shù)
- 原型: void realloc(void ptr,unsigned int size);
- 功能:先判斷當(dāng)前指針是否有足夠的連續(xù)空間,若足夠,擴(kuò)大ptr指向的地址并返回,若不夠,怎按size指定的大小分配空間,將原數(shù)據(jù)copy到新分配的內(nèi)存中,然后釋放原ptr所指向區(qū)域;
- 注意:內(nèi)存使用完畢后,應(yīng)使用free()函數(shù)釋放,但原來(lái)的指針是自動(dòng)釋放,不需要使用free;
#include
#include
int main()
{
char *str;
/* 一開始的內(nèi)存分配 */
str = (char *)malloc(15);
strcpy(str, "Hello World!");
printf("String = %s\n", str);
/* 重新分配內(nèi)存 */
str = (char *)realloc(str, 25);
strcat(str, ", C");
printf("String = %s\n", str);
free(str);
system("pause");
return 0;
}
calloc函數(shù)
- 原型:void* calloc(unsigned int num,unsigned int size);
- 功能:為已經(jīng)分配的內(nèi)存重新分配空間并復(fù)制內(nèi)容;
- 注意:num:對(duì)象個(gè)數(shù),size:對(duì)象占據(jù)的內(nèi)存字節(jié)數(shù),相較于malloc函數(shù),calloc函數(shù)會(huì)自動(dòng)將內(nèi)存初始化為0;
#include
#include
int main()
{
int num;
int i;
int *ptr;
printf("元素個(gè)數(shù)為:");
scanf("%d", &num);
ptr = (int*)calloc(num, sizeof(int));
printf("輸入 %d 個(gè)數(shù)字:\n", num);
for (i = 0; i < num; i++)
{
scanf("%d", &ptr[i]);
}
printf("輸入的數(shù)字為:");
for (i = 0; i < num; i++) {
printf("%d ", ptr[i]);
}
printf("\n");
system("pause");
return 0;
}
分享標(biāo)題:malloc、free、realloc、calloc函數(shù)
網(wǎng)站路徑:
http://weahome.cn/article/gddhjs.html