首页 > 其他分享 >malloc和new

malloc和new

时间:2022-11-20 21:13:09浏览次数:65  
标签:malloc int void free new 指针 size

C语言中的malloc()和free()

malloc

//void *malloc(int size);
//malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。
//malloc申请一个int型空间地址,大小为5个字节
(int *)malloc(4);//在堆区申请指定大小且连续的空间
//使用一个相应类型的指针来接受malloc申请的地址空间
int *p=(int*)malloc(4);
  • 注意开辟内存不足或者超出数据类型的容积时会发出警告

  • 如果malloc申请之后,记得及时free,否则会造成内存丢失,malloc申请的空间在程序关闭时会自动free,但是运行中的服务器几乎不会关闭,所以不用的空间及时释放

//malloc申请一维数组
int *p=(int*)malloc(sizeof(int)*5)//堆区开辟
//栈区开辟
int a[5];
int *p=&a[0];

一维数组指针空间开辟

int (*p)[3]=(char(*)[3])malloc(sizeof(int)*3)
//(*)[3]必须要这么写,这样是数组指针,如果写成*[3],只是指针数组
int a[3];
int(*p)[3]=&a;
free(p);

calloc

//calloc分配的空间初始化为0
int *p=(int*)calloc(5,sizeof(int));
//5代表申请的空间个数
free(p);

free

  • 申请的内存地址不能重复释放,否则会崩溃
  • 栈区空间不能释放,也会崩溃

realloc

void *realloc(void*ptr,size_t size)
//void*表示这个函数返回的指针变量,void*ptr值传进去的指针变量,realloc()会将ptr所值的内存块大小修改为size,并且将新的内存指针返回
  • 假设原内存块大小为n,新开辟的空间大小为size

    • 如果size<n,截取的内容不会发生变化

    • size>n,新分配的内存不会被初始化:

      1.ptr=NULL,相当于调用malloc(size);

      2.size=0,相当于free(ptr),ptr重新指向NULL

​ .....

总的来说,原来空间内存不够用了,用realloc函数开辟一块新的大空间,并且内部将原来数据拷贝到新空间,free原来指针。但是realloc函数太冗余,虽然可以带来很方便的使用,但是也很容易引发bug。

C++中的new和delete

C++ 中的 new/delete 和 new[]/delete[]深入理解

C++中new申请的内存, 可以用free释放吗?

标签:malloc,int,void,free,new,指针,size
From: https://www.cnblogs.com/HanXiaoCao/p/16909536.html

相关文章