大家本篇文章主要对malloc等函数的介绍,和相关的用法。
malloc相关函数
void* malloc (size_t size); //申请动态存储空间
void* calloc (size_t num, size_t size); //申请动态空间并进行初始化
void* realloc (void* ptr, size_t size); //对动态空间进行扩容
void free (void* ptr); //释放动态空间
使用需要包含<stdlib>头文件,而且一般都是配合free使用
malloc
void* malloc (size_t size);
malloc一般是在不确定用户需求空间时用来定义空间存储数据
malloc(40)定义四十个内存空间但是我们不确定类型所以需要对他进行强制转换
int* a=(int* )malloc(40);
在一些软件里面像int arr[n];是不被允许的,这时就可以使用malloc
int* arr=(int*)malloc(sizeof(int)*n);
但是我们使用完之后需要将他释放并将指针指为空
free(p);
p=NULL;
这样可以有效的防止内存泄漏
calloc
void* calloc (size_t num, size_t size);
calloc是在malloc的基础上对空间内部值进行初始化为0
int* p=(int*)calloc(20,sizeof(int));
同样使用后需要对其进行释放并指向0
realloc
void* realloc (void* ptr, size_t size);
realloc是在空间不足时,对其空间进行再次扩容
int *pc = (int *) realloc (p, sizeof(int) *n);
一样需要释放空间
动态内存开辟常见错误:
1.对NULL的指针解引用操作符
2.对动态开辟空间的越界访问
3,对非动态开辟内存使用free释放
4.使用free释放一块动态开辟内存的一部分
5.对同一块动态内存多次释放
6.动态开辟内存忘记释放(内存泄漏)
这里有一个程序可以看一下有没有什么问题
void GetMemory(char* p)
{
p = (char*)malloc(100);
}
void Test(void)
{
char* str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
int main()
{
Test();
return 0;
}
可以看这个程序,它存在两个问题,第一个是函数值传不过来,第二个就是没有释放空间倒是内存泄漏。
好了,本次介绍就到这里就结束了,若对文章内容有所异议或发现有所错误欢迎联系修改
谢谢大家观看。