专业开发网站多少钱,网站建设有哪些公司好,大同网站建设企业,网站建设 费用高5、内存管理
野指针
野指针指的是未进行初始化或未清零的指针#xff0c;不是NULL指针野指针产生原因及解决方案#xff1a; 指针变量未初始化#xff1a;指针变量定义时若未初始化#xff0c;则其指向的地址是随机的#xff0c;不为NULL#xff1b;定义时初始化为NULL…5、内存管理
野指针
野指针指的是未进行初始化或未清零的指针不是NULL指针野指针产生原因及解决方案 指针变量未初始化指针变量定义时若未初始化则其指向的地址是随机的不为NULL定义时初始化为NULL或合法内存地址。指针被free或delete之后未置空NULLfree和delete将指针指向的内存释放掉操作系统回收指针指向的内存区域但是指针变量本身的值不会自动重置释放内存后立即清空 / 使用智能指针。【if(p!NULL)只能判断是否为显式空指针】指针操作超出了变量的作用范围返回指向栈内存的指针是野指针栈区内存局部变量/函数参数在函数结束时会被释放
内存泄漏 程序在运行过程中动态分配的堆内存new因未正确释放而无法被重新使用的现象。随着程序运行时间的增长泄漏的内存会逐渐累积最终可能导致系统可用内存耗尽、程序性能下降甚至崩溃。 内存泄漏的原因 类的构造函数和析构函数中没有匹配的调用new和delete函数对象生命周期内动态分配的资源未正确释放: ①堆区创建对象占用内存却未释放②类的构造函数中动态地分配了内存但是析构函数未释放内存或未正确释放内存 浅拷贝导致重复释放或资源未释放两个对象指向同一内存析构时均尝试释放该内存导致双重释放错误。 class ShallowCopyClass {
public:int* data;ShallowCopyClass(int val) { data new int(val); }~ShallowCopyClass() { delete data; }// 未定义拷贝构造函数使用默认浅拷贝
};ShallowCopyClass a(5);
ShallowCopyClass b a; // 浅拷贝b.data 与 a.data 指向同一内存
// 析构时a 和 b 的析构函数均会 delete 同一内存导致崩溃基类析构函数未声明为虚函数:C 多态机制要求通过虚函数表动态绑定析构函数。若基类析构函数非虚delete 基类指针时仅调用基类析构函数子类析构逻辑被跳过;将基类析构函数声明为虚函数确保子类析构链正确执行 class Base {
public:Base() { /* 基类资源分配 */ }~Base() { /* 仅释放基类资源 */ } // 非虚析构
};class Derived : public Base {
public:int* derived_data;Derived() { derived_data new int(10); }~Derived() { delete derived_data; } // 不会被调用
};Base* obj new Derived();
delete obj; // 仅调用 Base::~Base(), Derived::~Derived() 未执行derived_data 泄漏