如何使用malloc和new
时间: 2023-04-09 17:03:47 浏览: 101
可以使用malloc和new来动态分配内存。malloc是C语言中的函数,new是C++中的关键字。使用malloc需要手动指定要分配的内存大小,而使用new则可以根据数据类型自动计算所需内存大小。使用完毕后,需要使用free释放malloc分配的内存,使用delete释放new分配的内存。
相关问题
malloc和new
malloc和new是用于动态分配内存的两种方法。
malloc是C语言中的函数,用于在堆上动态分配内存。它的函数原型是void *malloc(size_t size),返回一个指向分配内存的指针。分配的内存大小由size参数指定。malloc分配的内存位于堆上,可以使用free函数释放。
new是C++中的关键字,用于在自由存储区(可以是堆或静态存储区)动态分配内存。new的使用方式有两种:new和new\[\]。new用于分配单个对象的内存,而new\[\]用于分配数组的内存。new返回一个指向分配内存的指针。分配的内存大小由对象的类型决定。new分配的内存可以使用delete来释放,而new\[\]分配的内存应使用delete\[\]来释放。
虽然new和malloc都可以用于动态分配内存,但它们之间有一些区别。首先,new是C++的关键字,而malloc是C语言的函数。其次,new分配的内存位于自由存储区,而malloc分配的内存位于堆上。此外,new和delete是操作符,可以重载,而malloc和free是函数,不能重载。最后,由于new和malloc使用不同的内存管理机制,所以不能混合使用。也就是说,不能使用malloc分配的内存使用delete释放,反之亦然。
引用\[1\]解释了为什么new\[\]分配的空间用free()释放会出错,因为new\[\]分配空间返回的地址并不是它里面malloc分配空间的首地址,系统预留了sizeof(int)个字节。引用\[2\]说明了new分配的内存空间所在位置是自由存储区,而malloc在堆上动态分配内存。引用\[3\]提到了operator new /operator delete的实现可以基于malloc,而malloc的实现不可以去调用new。
#### 引用[.reference_title]
- *1* [C++ malloc/free/new/delete详解(内存管理)](https://blog.csdn.net/TABE_/article/details/122179176)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* *3* [new和malloc的区别](https://blog.csdn.net/Dr_Cassie/article/details/96494444)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
malloc 和new
malloc和new都是用于在程序运行时动态分配内存的方法。
1. malloc是C语言中的函数,用于分配指定大小的内存块。它的函数原型为:void* malloc(size_t size),其中size_t是一个无符号整数类型,表示要分配的内存块的字节数。malloc函数返回一个指向分配内存块的指针,如果分配失败则返回NULL。需要注意的是,malloc函数只负责分配内存,并不会调用构造函数初始化对象。
2. new是C++中的运算符,用于在堆上动态分配内存并调用构造函数初始化对象。new的语法形式为:new 类型 或者 new 类型[大小]。例如,new int会在堆上分配一个int类型的内存,并调用int的默认构造函数进行初始化。new操作符返回一个指向分配内存的指针,如果分配失败则抛出std::bad_alloc异常。
阅读全文