常用内存分配函数的说明
下面哪種C/C++ 分配內存的方法會將分配的空間初始化為0
A malloc()
B calloc()
C realloc()
D new[ ]
1) malloc 函數: void *malloc(unsigned int size)
在內存的動態分配區域中分配一個長度為size的連續空間,如果分配成功,則返回所分配內存空間的首地址,否則返回NULL,申請的內存不會進行初始化。
2)calloc 函數: void *calloc(unsigned int num, unsigned int size)
按照所給的數據個數和數據類型所占字節數,分配一個 num * size 連續的空間。
calloc申請內存空間后,會自動初始化內存空間為 0,但是malloc不會進行初始化,其內存空間存儲的是一些隨機數據。
3)realloc 函數: void *realloc(void *ptr, unsigned int size)
動態分配一個長度為size的內存空間,并把內存空間的首地址賦值給ptr,把ptr內存空間調整為size。
申請的內存空間不會進行初始化。
4)new是動態分配內存的運算符,自動計算需要分配的空間,在分配類類型的內存空間時,同時調用類的構造函數,對內存空間進行初始化,即完成類的初始化工作。動態分配內置類型是否自動初始化取決于變量定義的位置,在函數體外定義的變量都初始化為0,在函數體內定義的內置類型變量都不進行初始化。
這里僅針對new[]說明一下。
#include <iostream> #include <cstring>using namespace std;class A { public:int a;static int b; }; int A::b; int main(int argc ,char* argv[]) {A *test = new A;cout << test->a << endl << test->b << endl<< endl;int *a = new int[4];for (int i = 0; i < 4; ++i)cout << *a++ << ' ';return 0; }我們看看輸出:
選項D,是new數組的形式。new[](new的數組版)要求元素對象的類型必須具有默認構造函數(內建類型的“默認構造函數”是什么也不做),否則將不能使用new[]。
不過,C++11中已經不提倡用c array。更多的是用vector代替
總結
以上是生活随笔為你收集整理的常用内存分配函数的说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 跨境ERP服务商紧随“借卖网”遭黑客攻击
- 下一篇: 关于FCN的数据集着色说明