菜鸟笔记
提升您的技术认知

动态内存分配-ag真人游戏

c语言的内存分配

malloc

int x;
cin>>x;
int *ptr=(int*) malloc(x* sizeof(int));
p[0]=5;   p[1]=1;

malloc返回的是void类型的指针,所以要强制转换

如果分配失败,malloc会返回0

知识扩展*:c 采用nullptr来代替0,但是nullptr在c语言中不能用

calloc

int *ptr=(int* )calloc(x, sizeof(int) )

calloc分配的内存时自动将分配的内存里的值都清0,而mallloc不会

分配失败,返回0

realloc

重新分配内存

int *ptr1=(int* )realloc(ptr,500);

ptr是之前的内存地址,500是重新分配后的内存大小

重新分配有两种情况

假设将100内存重新分配到1000

1.在原有内存基础上扩充,此时返回的内存地址不变,原有数据保留

100 900

2.如果在原来的基础上不能扩充了,比如剩下的内存只有800,还有100被别的程序占用了,但是要扩充900,所有就要另起一行

100 数据a 800
100  数据a 900

将原来的100(数据a)复制到另外的内存区域,此时返回的内存地址改变,原有数据保留

如果内存分配失败,返回0

释放内存free

语法:

free(ptr);

特别注意*:释放后的内存不能再使用,此时ptr的值并没有变化,但是它成了悬挂指针,释放后的内存如果使用的话,可能会报错,也可能不报错。释放后的内存不能再次释放

new

底层还是用的c语言内存分配

int *ptr=new int;
int *ptr1=new int[5]

分配5个int大小的内存

释放内存

delete ptr;
delete[] ptr;

特别注意*:c释放内存用free,c 用delete,不能混用

网站地图