动态开内存(malloc与calloc)
程序员文章站
2022-06-16 23:42:58
malloc与calloc 1.函数原型 #include void *malloc(unsigned int size); //申请size字节的内存 void *calloc(unsigned int num, unsigned size); //申请num*size字节的内 ......
malloc与calloc
1.函数原型
#include<stdlib.h>
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函数申请的内存可以从函数中返回;而使用数组则不可以(存放在栈中,当函数返回时,内存已经被释放),示例代码如下:
1 #include<stdio.h> 2 #include<stdlib.h> 3 int main() 4 { 5 char* func1(); 6 char* func2(); 7 char* pf1; 8 char* pf2; 9 pf1 = func1(); 10 pf2 = func2(); 11 printf("%s\n", pf1); //输出f1 12 printf("%s\n", pf2); //输出乱码,错误信息-返回局部变量的地址 13 } 14 15 char* func1() 16 { 17 char* p = (char*)malloc(3 * sizeof(char)); 18 if (p) 19 { 20 p[0] = 'f'; 21 p[1] = '1'; 22 p[2] = '\0'; 23 return p; 24 } 25 return null; 26 } 27 28 char* func2() 29 { 30 char p[3] = "f2"; 31 return p; 32 }
下一篇: 老师给我啃啃皮
推荐阅读
-
C++指针与数组、函数、动态内存分配
-
Linux-(C/C++)动态内存分配malloc以及相关学习
-
动态内存申请(malloc, calloc, new)之分配虚拟内存空间和物理内存空间
-
动态开内存(malloc与calloc)
-
C++指针与数组、函数、动态内存分配
-
malloc,calloc,realloc及动态开辟内存常见错误
-
动态内存管理及常见错误malloc()、realloc()、calloc()、free()
-
内存空间分配,以及malloc、calloc、realloc、alloca、realloc的区别
-
C风格的动态内存管理(malloc、calloc、realloc、free)以及总结free崩溃常见的几种情况
-
对动态内存分配函数malloc、calloc、realloc、free的理解