如何使用C/C++动态分配一维和二维数组,并进行内存释放?


在C/C++中,可以使用`malloc`或`new`进行动态内存分配,并在使用完成后释放内存以避免内存泄漏。

### 动态分配一维数组
可以使用`malloc`(C语言)的方式分配,也可以使用`new`(C++)的方式:
```cpp
#include
#include // 包含malloc和free

int main() {
int n = 5;

// C语言的方式
int* arr1 = (int*)malloc(n * sizeof(int));
for (int i = 0; i < n; ++i) {
arr1[i] = i + 1;
}
// 输出数组元素
for (int i = 0; i < n; ++i) {
std::cout << arr1[i] << " ";
}
std::cout << std::endl;
free(arr1); // 释放内存

// C++的方式
int* arr2 = new int[n];
for (int i = 0; i < n; ++i) {
arr2[i] = i + 1;
}
// 输出数组元素
for (int i = 0; i < n; ++i) {
std::cout << arr2[i] << " ";
}
std::cout << std::endl;
delete[] arr2; // 释放内存

return 0;
}
```

### 动态分配二维数组
对于二维数组,需要分配多个内存块。以下是分配和释放二维数组的方法:
```cpp
#include
#include // 包含malloc和free

int main() {
int rows = 3, cols = 4;

// C语言的方式
int** arr1 = (int**)malloc(rows * sizeof(int*));
for (int i = 0; i < rows; ++i) {
arr1[i] = (int*)malloc(cols * sizeof(int));
for (int j = 0; j < cols; ++j) {
arr1[i][j] = i * cols + j + 1;
}
}
// 输出数组元素
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
std::cout << arr1[i][j] << " ";
}
std::cout << std::endl;
}
// 释放内存
for (int i = 0; i < rows; ++i) {
free(arr1[i]);
}
free(arr1);

// C++的方式
int** arr2 = new int*[rows];
for (int i = 0; i < rows; ++i) {
arr2[i] = new int[cols];
for (int j = 0; j < cols; ++j) {
arr2[i][j] = i * cols + j + 1;
}
}
// 输出数组元素
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
std::cout << arr2[i][j] << " ";
}
std::cout << std::endl;
}
// 释放内存
for (int i = 0; i < rows; ++i) {
delete[] arr2[i];
}
delete[] arr2;

return 0;
}
```

### 总结
1. 使用`malloc`和`free`是C语言的方式,`new`和`delete`是C++的方式。
2. 动态分配的内存必须在使用完成后释放,以避免内存泄漏。
3. 对于二维数组,需要逐行分配和释放内存。

若文章对您有帮助,帮忙点个赞!

0
0
发布时间 2025-03-13 21:42:12
0 条回复(回复会通过微信通知作者)
点击加载更多评论
登录 后再进行评论
(微信扫码即可登录,无需注册)