问题:C++内存泄漏:
原因: 内存错误和并非问题。
1,内存泄漏:堆栈内存没有释放,(少量一般无事);(大量内存泄漏)导致内存耗尽,后续分配内存失败,程序奔溃。(少量内存泄漏),程序运行时间长久,也容易奔溃。
2,内存越界访问:(1)读越界,读取不是自己的数据。读取地址无效,程序直接奔溃。读取地址有效,但是数据是随机的,虽然读取成功,但是会发生不可以预料的后果。(2)写越界,或者可以叫做缓存区溢出,因为所写的数据随机,所以后果未知。
3,野指针:释放掉的内存会被内存管理器重新分配内存。此时它(野指针)指向的内存已经被赋予了新的意义。对野指针指向的内存访问,同样会发生不可预知的后果。解决野指针最好的方法:释放内存后立即把对应指针置为空值。
4,空指针:访问空指针指向的内存,一般会导致程序奔溃,或者未知的后果。所以在访问指针指向的内存时,一定要保证指针不是空指针。
5,引用未初始化的变量:未初始化变量的内容是随机的,使用这些数据会造成未知的后果。最好的解决办法:在声明变量的时候就对它进行初始化。
6,不清楚的指针运算:如:int *p=....;p+n等价于(size_t)p+n*sizeof(*p);
7,结构体成员顺序变化引发的错误
8,结构体大小变化引发的错误
9,分配释放不配对
10,返回指向临时变量的指针
栈里面的变量时临时的,当前函数执行完成时,先关的临时变量和参数都被清除了。不能