生成int等常见类型

1
2
3
4
5
6
7
8
9
10
11
//格式,模板,生成一种什么类型的存储空间
T* p = new T;

//生成一块int大小的内存,由指针P指向
int* p = new int;

//可以进行操作
*p = 5;

//释放动态空间
delete p;

生成一维数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//格式,模板,生成一种什么类型的存储空间
T* p = new T[N];

//生成一块int大小的内存,由指针P指向
int* p = new int[N];

//可以进行操作
for (int i = 0; i < N; i++) {
cin >> *(p + i);
}

//释放动态空间
delete[]p;

//写成delete p;的话,编译时没有问题,运行时一般也不会发生错误,但实际上会导致动态分配的数组没有被完全释放。

生成二维数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//生成二维动态数组(m,n矩阵)
int m, n;
cin >> m >> n;
int** 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++) {
cin >> p[i][j];
}
}

//释放二维动态空间的方法
for (int i = 0; i < n; i++) { ---------------先列后行
delete[] p[i];
}
delete[]p;

内存泄漏

1
2
3
用 new 运算符动态分配的内存空间,一定要用 delete 运算符释放。否则,即便程序运行结束,这部分内存空间仍然不会被操作系统收回,从而成为被白白浪费掉的内存垃圾。这种现象也称为“内存泄露”。

如果一个程序不停地进行动态内存分配而总是没有释放,那么可用内存就会被该程序大量消耗,即便该程序结束也不能恢复。这就会导致操作系统运行速度变慢,甚至无法再启动新的程序。但是,只要重新启动计算机,这种情况就会消失。