malloc函数,又称动态分配内存,用于申请一块连续的指定大小的内存块区域,以void *类型返回分配的内存区域地址。
*当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态分配内存。*void * 类型表示未确定类型的指针。*C,C++规定,**void ** 类型可以通过类型转换强制转换为任何其它类型的指针。
函数头文件
#include <stdlib.h>
或者
#include <malloc.h>
函数声明
void * malloc(size_t_size);
备注:void 表示未确定类型的指针,void 可以指向任何类型的数据,更明确的说是指申请内存空间时还不知道用户是用这段空间来存储什么类型的数据(比如是char还是int或者其他数据类型)。
其中参数size_t size表示动态内存分配空间的大小,以字节为单位。size_t 是typedef重定义的类型,指示使用者这个参数表示一个长度,在 size后加上t,表示是整型相关数据类型,以后看到xxx_t的类型,通常都是整型相关数据类型重定义。
返回值
如果分配成功,则返回指向被分配内存的地址,否则返回NULL。
当内存不再使用时,应该用free()函数将其释放。
注意事项
- malloc ()函数申请的是一个地址,那么便是指针类型,那么它所赋值的变量也应该是指针类型。
- 规范操作:(分配类型 *)malloc(分配元素个数 *sizeof(分配类型))
- malloc()函数动态分配空间编程:
我在其他博客上发现的宝贝:
/***************************************
malloc()函数动态分配空间编程:
(1)定义一个char*型指针变量p
(2)为p分配10个字节的内存空间
(3)复制"come on" 字符串到p指向的内存空间
(4)将p指针指向的内存空间再扩大20个字节
(5)将",baby!"字符复制在p指向空间字符串的后面
(6)释放p指向的空间
****************************************/
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
int main()
{
char *p;
p = (char *)malloc(10*sizeof(char));
memset(p,0,10*sizeof(char));
stpcpy(p,"come on");
cout << "p: " << p << endl;
p =(char *)realloc(p,20*sizeof(char));
cout << "p: " << sizeof(p) << endl;
strcat(p,",baby!");
cout << "p: " << p << endl;
free(p);
return 0;
}
输出:
p: come on
p: 4
p: come on,baby!
原文:https://blog.youkuaiyun.com/xiaonan153/article/details/80784874