C语言学习:malloc()函数

函数声明:

void *malloc(size_t size)

头文件:

#include <stdio.h>

函数描述:

  • 分配所需的内存空间,并返回一个指向它的指针。

参数:

  • size – 内存块的大小,以字节为单位。

返回值:

  • 该函数返回一个指针 ,指向已分配大小的内存。如果请求失败,则返回 NULL。

实例:

下面的实例演示了 malloc() 函数的用法。

#include <stdio.h>
#include <stdlib.h>

void update_value(int* p){
	*p = 100;
}

int main()
{
	//在栈上面分配变量a 占4个字节
	int a = 10;
   	//申请类型是int内存空间;占4个字节;p指针指向该4个字节的内存空间        
   	int *p = (int*)malloc(sizeof(int));
   	//p变量也占4字节;所以sizeof(p)=8个字节
   	//赋值p只指向的动态空间为50
   	*p = 50;
   	printf("p->value=%d &p=%p sizeof(*p)=%ld, sizeof(p)=%ld sizeof(a)=%ld \n", *p, p, sizeof(*p), sizeof(p),sizeof(a));

   	free(p);//修改p指向的内存中的数据
   	printf("p->value=%d &p=%p sizeof(*p)=%ld, sizeof(p)=%ld sizeof(a)=%ld \n", *p, p, sizeof(*p), sizeof(p),sizeof(a));
 
 	update_value(p);
 	printf("p->value=%d &p=%p sizeof(*p)=%ld, sizeof(p)=%ld sizeof(a)=%ld \n", *p, p, sizeof(*p), sizeof(p),sizeof(a));
   	return(0);
}

注:当内存不再使用的时候,应使用free()函数将内存块释放掉。

void*:表示未确定类型的指针,C/C++规定void*可以强转为任何其他类型的指针,关于void还有一种说法就是其他任何类型都可以直接赋值给它,无需进行强转,但是反过来不可以。

malloc:分配的内存大小至少为参数所指定的字节数。

malloc的返回值是一个指针,指向一段可用内存的起始位置,指向一段可用内存的起始地址,多次调用malloc所分配的地址不能有重叠部分,除非某次malloc所分配的地址被释放掉malloc应该尽快完成内存分配并返回(不能使用NP-hard的内存分配算法)实现malloc时应同时实现内存大小调整和内存释放函数(realloc和free)

mallocfree是配对的,如果申请后不释放就是内存泄露,如果无故释放那就是什么也没做,释放只能释放一次,如果一块空间释放两次或者两次以上会出现错误(但是释放空指针例外,释放空指针也等于什么也没做,所以释放多少次都是可以的。)

发布了100 篇原创文章 · 获赞 45 · 访问量 64万+

猜你喜欢

转载自blog.csdn.net/wangzhongshun/article/details/101430545
今日推荐