欢迎光临
我们一直在努力

动态内存管理(一)

一、内存开辟方式

1.1 int a = 20;

1.2. char arr[10 = {10};

上述内存开辟方式有两个特点:

a.空间开辟的大小是固定的;

b.数组在声明的时候,必须指定数组的长度,数组空间一旦确定了,大小不能调整。

C语言引入了动态内存开辟,让程序员自己可以申请和释放空间,就比较灵活了。

二、malloc和free

2.1.malloc

2.1.1.函数原型:

void* malloc (size_t size);

2.1.2.作用:

分配一个大小为 size 字节的内存块,返回指向该块起始位置的指针。 新分配的内存块的内容未被初始化,保持不确定的值。 如果 size 为零,返回值取决于特定的库实现(可能是也可能不是空指针),但返回的指针不得被解引用。

2.1.3.注意事项

a.如果开辟成功,则指向开辟好空间的指针。

b.如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。

c.返回类型是void*,所以malloc函数并不知道开辟空间的类型,具体在使用的时候由使用者自己来决定。

d.如果参数size为0,malloc的行为是标准未定义的,取决于编译器。

三、free

c语言提供了另外一个函数free,专门是用来做动态内存的释放和回收的。

3.1.1函数原型

void free (void* ptr);

3.1.2.作用

      调用该函数会释放此前通过 malloc、calloc 或 realloc 分配的内存块,使该内存可再次用于后续分配。 如果指针 ptr 并非指向由上述函数分配的内存块,将导致未定义行为。 如果 ptr 是空指针,函数不执行任何操作。

3.1.3.注意事项

a.如果参数ptr指向的空间不是动态开辟的,那free函数的行为是未定义的。

b.如果参数ptr是NULL指针,则函数什么都不做。

malloc函数和free函数都声明在stdlib.h头文件中

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

评论 抢沙发

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