码农公社 210.net.cn 210= 1024 10月24日一个重要的节日--码农(程序员)节
malloc与calloc
1.函数原型
#include
void *malloc(unsigned int size); //申请size字节的内存
void *calloc(unsigned int num, unsigned size); //申请num*size字节的内存
2.函数的返回值为void*类型,使用时需强制转换为所需要的类型;
如果内存申请失败,则返回NULL,所以使用申请到的内存时需要先进行判断。
如:char* p = (char*)malloc(6 * sizeof(char));
3.申请的内存位于堆中,不再需要使用时,需调用free函数释放
void free(void *p);
注意:
1.void *与NULL int *p=NULL; void *p;
2.malloc与数组的比较:
(1)传给malloc函数的实参可以是一个表达式,从而可以“动态”申请一块内存;
(2)使用malloc函数申请的内存可以从函数中返回;而使用数组则不可以(存放在栈中,当函数返回时,内存已经被释放),
示例代码如下:
#include
#include
int main()
{
char* func1();
char* func2();
char* pf1;
char* pf2;
pf1 = func1();
pf2 = func2();
printf("%s\n", pf1); //输出f1
printf("%s\n", pf2); //输出乱码,错误信息-返回局部变量的地址
}
char* func1()
{
char* p = (char*)malloc(3 * sizeof(char));
if (p)
{
p[0] = 'f';
p[1] = '1';
p[2] = '\0';
return p;
}
return NULL;
}
char* func2()
{
char p[3] = "f2";
return p;
}
资料来自网络,如有侵权请联系删除