#include <iostream>
#include <cstdlib>
void processAndFree(int* arr) {
// 处理指针为NULL的情况
if (arr == nullptr) {
return;
}
try {
// 在这里进行特定处理,例如打印数组元素
for (int i = 0; i < 10; ++i) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
} catch(...) {
// 如果处理过程中出现错误,先释放内存
std::free(arr);
throw;
}
// 处理完成后释放内存
std::free(arr);
}
内存管理思路
- 检查空指针:在函数开始时,首先检查传入的指针是否为
NULL
。如果是NULL
,直接返回,避免空指针解引用导致的未定义行为。
- 异常处理:使用
try - catch
块来捕获处理过程中可能抛出的异常。一旦捕获到异常,立即释放动态分配的内存,防止内存泄漏。
- 正常释放:在处理完成后,使用
std::free
来释放动态分配的内存,确保内存被正确回收。
性能优化思路
- 减少不必要操作:在空指针检查后直接返回,避免了对空指针后续无意义的处理,提升了性能。
- 异常处理开销:虽然
try - catch
块会带来一定的性能开销,但在确保内存安全方面是必要的。在实际应用中,如果性能要求极高且能确定不会抛出异常,可以考虑去掉try - catch
块,但同时要保证处理过程的健壮性。