动态内存申请与释放
- 格式:docx
- 大小:13.02 KB
- 文档页数:4
动态内存申请与释放
(1)malloc方式
申请一维内存时,格式为:
类型表示符*变量名;
变量名= (类型标识符*)malloc(sizeof(类型标识符)*数组大小);
在使用完该方式申请的内存后,必须用free()函数及时释放,格式为:free(变量名)
变量名= NULL;
当申请二维内存时,格式为:
类型标识符**变量名;
变量名= (类型标识符**)malloc(sizeof(类型标识符*)*数组行大小);
for(int i=0;i<数组行大小;i++)
变量名[i] = (类型标识符*)malloc(sizeof(类型标识符)*数组列大小);释放格式:
free(变量名);
变量名= NULL;
(2)new方式
当申请一维内存时,格式为:
类型标识符*变量名;
变量名= new 类型标识符[数组大小];
使用该方式申请的内存后,必须用delete()函数及时释放格式:
delete[] 变量名;
变量名= NULL;
当申请二维内存时,格式为:
类型标识符**变量名;
变量名= new 类型标识符*[数组行大小];
for(int i=0;i<数组行大小;i++)
变量名[i] = new 类型标识符[数组列大小];
释放格式:
delete[] 变量名;
变量名= NULL;
例子:
申请二维内存
代码:
1 #include
2 #include
3 using namespace std;
4
5 int main()
6 {
7 int row;
8 int col = 2;
9 cout<<"please input row:"< 10 cin>>row; 11 int **memo; 12 memo = (int **)malloc(sizeof(int*)*row); 13 for(int k=0;k 14 memo[k] = (int *)malloc(sizeof(int)*col); 15 for(int i=0;i 16 { 17 for(int j=0;j 18 cin>>memo[i][j]; 19 } 20 cout<<"标号——————————————值"< 21 for(int i=0;i 22 { 23 for(int j=0;j 24 cout< 25 cout< 26 } 27 free(memo); 28 memo = NULL; 29 return 0; 30 31 } 注明:错误的释放指针会导致程序崩溃 但是什么时候会出现这种情况?怎么解决? 当指向内存块的指块已超出其边界,一定要将指针指回首地址。