C&C++内存管理
C和C++语言没有自动的垃圾回收机制,因此内存管理对于这两种语言来说非常重要。以下是一些关键的内存管理概念和示例:
手动分配内存:
在C中使用
malloc
函数,在C++中使用new
操作符。
int* ptr = (int*)malloc(sizeof(int) * 10); // C
int* ptr = new int[10]; // C++
手动释放内存:
在C中使用
free
函数,在C++中使用delete
操作符。
free(ptr); // C
delete[] ptr; // C++
内存泄漏:
分配了内存后,没有及时释放,导致内存不被释放,长时间积累可能导致内存耗尽。
错误释放:
释放了不是由当前上下文控制的内存,这是未定义行为,可能导致程序崩溃。
数组和指针:
在C++中,使用
new
创建数组时,应使用delete[]
来释放,否则会导致未定义行为。
int* ptr = new int[10];
// ...
delete[] ptr; // 正确方式
智能指针:
在C++中,可以使用智能指针(如
std::unique_ptr
,std::shared_ptr
,std::weak_ptr
)来自动管理内存。
std::unique_ptr<int[]> ptr(new int[10]); // C++
内存分配失败:
检查
malloc
和new
是否返回NULL
(C)或抛出异常(C++),以确保内存分配成功。
int* ptr = (int*)malloc(sizeof(int) * 10);
if (ptr == NULL) {
// 处理内存分配失败
}
try {
int* ptr = new int[10];
} catch (std::bad_alloc& e) {
// 处理内存分配异常
}
总结:
- 使用
malloc
/free
(C)或new
/delete
(C++)管理内存。 - 确保配对使用
malloc
/free
或new
/delete
,避免内存泄漏或错误释放。 - 对于数组,在C++中使用
new[]
和delete[]
。 - 使用智能指针管理资源,如
std::unique_ptr
,自动释放内存。 - 检查内存分配是否成功,避免未定义行为。
评论已关闭