C++面试常见问题——02动态分配内存
生活随笔
收集整理的這篇文章主要介紹了
C++面试常见问题——02动态分配内存
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
動態分配內存
C++動態內存
C++程序中內存分為兩個部分
- 堆:程序中未使用的內存,在程序運行時可用于動態分配內存。
- 棧:函數內部申明的所有變量都將占用棧內存。
很多時候不知道一個程序到底需要多少內存,可以在程序運行時使用關鍵字new動態分配內存,這會返回所分配的空間地址。當不在需要分配的內存時可以使用delete進行刪除。
動態內存分配方式
1. new與delete
用法:
類型名 *指針變量 = new 類型名;
類型名 *指針變量 = new 類型名[元素個數];
int *p = new int; //指向int型的指針
int *pArr = new int[len]
使用new時自由存儲區可能已經被用完,因此最好檢查是否分配成功。
int *p = NULL;
if( !(p = new int) ){
cout<<"ERROR"<<endl;
exit(1);
}
delete的用法
delete p;
delete []pArr; //刪除內存塊后強烈建議將指針指向NULL,避免其成為野指針。
pArr = NULL;
二維數組的動態內存分配
int **array;
//假設維度為m x n
array = new int *[m];
for(int i = 0; i < m;i++){
array[i] = new int array[n];
}
//刪除
for(int i = 0;i < m;i++){
delete []array[i];
}
delete []array;
2.對象的二動態內存分配
#include<iostream>
using namespace std;
class Box{
public:
Box(){
cout<<"構"<<endl;
}
~Box(){
cout<<"析"<<endl;
} };
int main(){
Box* b = new Box[5]; //構構構構構
delete []b; //析析析析析
return 0;
}
2. malloc與free
malloc是編譯器的內置函數,包含于頭文件stdlib.h。
//malloc原型
void malloc(unsigned in size)
//free原型
void free(void* p)
//malloc用法
int *p = (int*)malloc(sizeof(int)*len);
for(int i= 0;i < len;i++){
cin>>*p;
}
//free用法
free(p);
- 使用new關鍵字時不僅開辟了內存,還創建了對象,特別是對類使用時自動調用構造函數,delete時自動調用析構函數。而malloc對類使用時只會開辟內存空間,不會對類自動進行初始化,free時也不會清理成員函數的
- malloc&free是標準庫函數,new&delete是C++關鍵字。
- malloc&free需要手動計算大小,返回值為void*。new&delete自動計算類型的大小,返回對應類型的指針。
- malloc&free分配內存失敗會返回0。new&delete分配失敗時會拋出異常。
參考鏈接:
- 菜鳥教程——C++動態內存
- malloc/free和new/delete的區別和聯系
總結
以上是生活随笔為你收集整理的C++面试常见问题——02动态分配内存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Axure下载,附注册码
- 下一篇: TIP 2018论文概述:基于深度学习的