C 常见的三种内存破坏场景和分析
扫描二维码
随时随地手机看文章
C
开发经验的同学大多数踩过内存破坏的坑,有这么几种现象:- 比如某个变量整形,在程序中只可能初始化或者赋值为
1
或者2
, 但是在使用的时候却发现其为0
或者其他的情况。对于其他类型,比如字符串等,可能出现了一种出乎意料
的值! - 程序在堆上申请内存或者释放内存的时候,在内存充足的情况下,居然出现了堆错误。
1. 内存破坏之强制类型转换
大家都知道不匹配的类型强制转换会带来一些bug
,比如int
和unsigned int
互相转换,又或者int
和__int64
强行转换。是不是每次当读起这类文章起来如雷贯耳,但是当自己去写代码的时候还是容易犯错?这也就是为什么C
容易写出坑
的原因,明知可能有错,还难以避免。这往往是因为真实的项目中复杂程度,往往让人容易忽略这些细节。不少老的工程代码还是采用VC6
编译,为了安全问题或者使用C 新特性需要将VC6
升级到更新的Visual Studio
。接下来要介绍的一个样例程序,就是隐藏于代码中的一个问题,如果从VC6
升级到VS2017
的时候会带来问题吗?可以先找找看:#include
#include
class DemoClass
{
public:
DemoClass() : m_bInit(true), m_tRecordTime(0)
{
time((time_t *)(