您的位置:首页 > 编程语言 > C语言/C++

c/c++动态内存分配的区别

2017-05-02 16:05 260 查看
c中动态内存分配使用malloc和free。

malloc指定需要分配的内存大小,分配成功则返回指向该内存的指针,不成功则返回空指针。返回的指针类型为void *,表示不确定指针所指内存存放的数据类型,所以需要进行强制类型转换。

将之前指向malloc分配内存的指针传递给free可以将该内存释放掉并归还给os。

使用malloc和free有2个注意事项

1)malloc之后需要检查是否分配成功

2)free之后的指针所指向的内存已经不再归程序所有,但不排除后面还会使用到,所以需要将该指针置为NULL

c++中动态内存分配使用new和delete

new表达式实际执行了三个步骤:1)调用标准库函数operator new分配一块足够大、未初始化、未命名的内存空间以存储特定类型的对象。2)编译器运行相应的构造函数创建一个对象,并传入初始值。3)返回一个指向该对象的指针。在1)中,operator new分配失败会抛出一个std::bad_alloc的异常,同时该函数也有返回空指针的版本。在2)中,如果不显示地初始化,对于类类型就会调用它们的默认构造函数进行初始化,而内置类型的对象无法初始化。

delete执行了两个步骤:1)编译器运行delete表达式中相应对象的析构函数销毁对象。2)调用标准库函数operator delete释放内存空间。与free类似,在delete后指针就变为悬垂指针,可以将delete置为NULL或者零值指针。

零值指针和空指针的区别见下面链接

http://blog.csdn.net/bailyzheng/article/details/7677628
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: