内存越界(累积篇)

来源:互联网 发布:苹果手机4g网络怎么开 编辑:程序博客网 时间:2024/06/11 19:38
下面使用代码来说明这个问题。

int functiontest(char *pszParam, int nLen, int nID)
{
char szSQL[500];
sprintf(szSQL,
" Select * from tabble1 " 
" where cond1 = %s and id = %d ",
pszParam,    //当pszParam为未初始化的野指针,可能导致内存越界
nID
);
//以下代码省略
//......
}

没错,就是上述使用sprintf()函数时产生了内存越界的错误,但是该函数本身的执行并不一定马上报错或者引起程序崩溃,
因为pszParam为野指针, strlen(pszParam)则是未确定的长度,
所以在有些情况下,strlen(pszParam)的长度可能远大于szSQL数组的大小512,sprintf()就会有内存越界的操作,
结果就会导致未定义的异常,我的程序里就导致了后续其他函数内存访问错误,直接程序崩溃。

其实在该函数中我忽略了nLen参数的意义,该参数是指pszParam的长度,
但是nLen == 0 的情况我确没有判断并加以处理,所以导致内存越界程序崩溃。
原创粉丝点击