c语言的动态内存分配
malloc
头文件: malloc.h
原型 void* malloc( size)(不标准写法)
其中size表示的是你想申请的字节数,为了准确我们一般使用sizeof函数,而返回的是一个void指针,这就导致了我们一般都要强制类型转换到对应的类型。
例: int p=(int)malloc(sizeof(int))
int p=(int)malloc(10*sizeof(int)) //数组
前面的int* 就是强制类型转换
此外,malloc一般分配完内存后还要进行检查看是否分配成功
if(p==NULL) |
而且malloc是不会自动初始化的,所以在分配完内存后最好先用NULL初始化一下。
realloc
字面意思,就是给一个已经分配内存的指针增加内存,原内存中的数据不变
头文件 #include
原型: void realloc(void mem_address, unsigned int newsize);
mem_address是原指针,newsize是新的空间,可以大可以小
可能有下列几种情况
- 如果原有空间后面还有足够的内存空间,那么直接在后面增加内存空间
- 如果原有空间不足,会重新分配空间到其他地方,同时原地址中的数据也会复制过去
- 如果没有可供分配的空间,返回NULL。此时,原指针仍然有效
注意,如果分配成功,无论是否分到新空间,原指针都会被释放掉
如果 mem_address为0 那么和malloc相似,也是分配一块内存空间
如果 newsize为0,相当于free
也就是说,最好不要出现 p=realloc(p,size)这种写法,防止分配失败后指针直接丢失。好的办法是先用另一个参数接受realloc的内容,如果不为null,再让p=q
int* q; |
free
释放动态申请的内存空间
原型: void free(void* ptr)
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment