1 、
m_strctChnParam = NULL;
2 、
if (m_strctChnParam)
{
free(m_strctChnParam);
m_strctChnParam = NULL;
}
m_strctChnParam = (strChannelParam *)malloc(sizeof(strChannelParam) * m_iChannelNum * BASIC_STREAM_TYPES);
if (m_strctChnParam)
{
memset(m_strctChnParam, 0, sizeof(strChannelParam) * m_iChannelNum * BASIC_STREAM_TYPES);
for (int i = 0; i < m_iChannelNum; ++i)
{
m_strctChnParam[i].m_iChnConnectSta = -1;
}
}
今天遇到一个问题,将第一块代码注释掉,第二段就会报错:
原来:
指针如果没有初始化,系统会默认初始化为:0xcdcdcd,导致判断空失败,free野指针导致崩溃。
0xcdcdcd (2011-03-25 23:52:19)别谈:
标签: 杂谈 |
VC在debug模式下,对CRT(C Runtime)分配的堆(Heap)内存,都会初始化填充成0xcdcdcdcd。目的就是为了方便程序员debug,一旦看到0xcdcdcdcd,就表示访问了没有初始化的内存。