C语言之动态内存开辟

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Tian_Luo_Girl/article/details/79758167

动态内存开辟

void *malloc( size_t size );
malloc向内存申请一块连续可用的size大小的空间,并返回指向这块空间的指针
void* calloc (size_t num, size_t size);
calloc向内存申请num个大小为size的空间,并把每个字节初始化为0,函数返回指向这块空间的指针
所以,当需要开辟内存并且要将每个元素初始化为0时,可以使用calloc

calloc比malloc多实现了一个初始化的功能,所以如果没必要初始化,还是调用malloc效率更高些

void* realloc (void* ptr, size_t size);
realloc实现对动态开辟的内存空间大小的调整
ptr:要调整的内存地址,size: 调整之后新大小
返回值为调整之后的内存起始位置。

情况1:原有空间之后有足够大的空间
要扩展内存就直接原有内存之后直接追加空间,原来空间的数据不
发生变化
情况2:原有空间之后没有足够大的空间
在堆空间上另找一个合适大小的连续空间来使用,并将原先的内存释放。这样函数返回的是一个新的内存地址,realloc调整原内存空间大小的基础上,还会将原来内存中的数据移动到 新的空间。

realloc之后原先的指针指向可能会发生变化
void *new_ptr = realloc(ptr, new_size);
if (!new_ptr) {
// 错误处理。
}
ptr = new_ptr

摘自:http://c.biancheng.net/cpp/html/2536.html

这三个函数都是进行动态内存分配的,根据需要可以选择适当的函数
如果开辟失败会返回空指针,所以要进行非空判断
他们的返回值类型都是:void *
所以在调用时要进行类型强制转换

动态内存释放

所有的动态内存分配都要进行释放,否则会发生内存泄漏
void free (void* ptr);
ptr为指向动态内存开辟的空间

猜你喜欢

转载自blog.csdn.net/Tian_Luo_Girl/article/details/79758167