自己前两天面试的时候被面试官要求手写在堆上开辟二维数组并释放,自己之前一直用C++stl的库,很久不写了,居然没有写出来,大写的尴尬。今天特意总结一下
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
void dynamic1D_malloc();
void dynamic1D_new();
void dynamic2D_malloc();
void dynamic2D_new();
int main(){
dynamic1D_malloc();
dynamic1D_new();
dynamic2D_malloc();
dynamic2D_new();
while(1);
return 0;
}
void dynamic1D_malloc(){
int m;
int *p;
cout << "Input array length : " << endl;
cin >> m;
p = (int*) malloc(sizeof(int)*m);
for(int i=0;i<m;++i){
cin >> *(p+i);
}
for(int i=0;i<m;++i){
cout << *(p+i);
}
free(p);
return (void)0;
}
void dynamic1D_new(){
int m;
cout << "Input array length : " << endl;
cin >> m;
int *p = new int [m];
for(int i=0;i<m;++i){
cin >> *(p+i);
}
for(int i=0;i<m;++i){
cout << *(p+i);
}
delete [] p;
return;
}
void dynamic2D_malloc(){
int m,n;
int **p;
cout << "Input array 1D and 2D length : " << endl;
cin >> m >> n;
p = (int**) malloc(sizeof(int*)*m);
for(int i=0;i<m;++i){
*(p+i) = (int*)malloc(sizeof(int)*n);
}
for(int i=0;i<m;++i){
for(int j=0;j<n;++j){
p[i][j] = 0;
}
}
for(int i=0;i<m;++i){
for(int j=0;j<n;++j){
cout << p[i][j] << " " ;
}
cout << endl;
}
for(int i=0;i<m;++i){
free(*(p+i));
}
free(p);
}
void dynamic2D_new(){
int m,n;
cout << "Input array 1D and 2D length : " << endl;
cin >> m >> n;
int **p = nullptr;
p = new int* [m];
for(int i=0;i<m;++i){
*(p+i) = new int [n];
}
for(int i=0;i<m;++i){
for(int j=0;j<n;++j){
p[i][j] = 2;
}
}
for(int i=0;i<m;++i){
for(int j=0;j<n;++j){
cout << p[i][j] << " " ;
}
cout << endl;
}
for(int i=0;i<m;++i){
delete [] *(p+i);
}
delete [] p;
return;
}
代码中详细列出来了释放和开辟的过程,其中三位或者更高为维度的数组,可以参考二维数组的实现。