欢迎光临
我们一直在努力

动态内存管理(二)

一、calloc

1.1.calloc函数也用来动态内存分配

1.2.函数原型

void* calloc (size_t num, size_t size);

1.3.函数的作用

    分配并清零初始化数组,为一个包含 num 个元素的数组分配一块内存空间,每个元素的大小为 size 字节,并且将该内存块的所有二进制位初始化为零。 最终效果是分配了一块大小为 (num*size) 字节且经过清零初始化的内存块。 如果 size 为零,返回值取决于具体的库实现(可能是空指针,也可能不是),但绝对不能对返回的指针进行解引用操作。

1.4.注意事项

a.函数的功能是为num个大小为size的元素开辟一块空间,并且把空间的每个字节初始化为0;

b.与函数malloc的区别只在于calloc会在返回地址之前把申请的空间的每个字节初始化为全零

二、realloc

realloc函数的出现让动态内存管理更加灵活

2.1.函数原型

void* realloc (void* ptr, size_t size);

2.2.函数的作用

   重新分配内存块更改由指针 ptr 指向的内存块的大小。 该函数可能会将内存块移动到新的位置(函数会返回该新位置的地址)。 无论内存块是否被移动到新位置,其内容都会被保留,保留长度为新大小和旧大小中较小的那个值。如果新大小大于旧大小,新增分配部分的值是未定义的。 若指针 ptr 是空指针,则该函数的行为等同于 malloc:分配一块大小为 size 字节的新内存块,并返回指向该内存块起始位置的指针。

2.3.注意事项

a.ptr是要调整的内存地址

b.size是调整之后的新大小

c.返回值为调整之后的内存起始地址

三、常见的动态内存的错误

3.1.对NULL指针的解引用操作

3.2.对动态开辟空间的越界访问

3.3.对非动态开辟内存使用free释放

3.4.使用free释放一块动态开辟内存的一部分

3.5.对同一块动态内存多次释放

3.6.动态开辟内存忘记释放(内存泄漏)

赞(0)
未经允许不得转载:171主机测评 » 动态内存管理(二)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址