内存越界(累积篇)
来源:互联网 发布:苹果手机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 的情况我确没有判断并加以处理,所以导致内存越界程序崩溃。
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 的情况我确没有判断并加以处理,所以导致内存越界程序崩溃。
- 内存越界(累积篇)
- 内存篇之越界访问
- 内存越界
- 内存越界
- 内存越界
- 内存越界
- 内存越界
- 内存越界
- 内存越界
- 内存越界
- 内存越界
- 内存越界
- 内存越界了
- 内存访问越界
- 内存操作越界略述
- 【转】内存访问越界
- 内存访问越界
- 内存访问越界
- poj 1159
- Java Axis 创建简单的WebService .
- android短信拦截
- ios之多视图应用程序源码
- Android 如何在自定义界面上启用输入法 (How to enable inputmethod for the custom UI)
- 内存越界(累积篇)
- Linux grep
- BIT寒假练习-2013__1012:导弹防御问题
- jQuery的each函数--轻松实现一个页面中的多个进度条
- c3p0 数据库迁移
- Two minus one Rules
- gsensor即时数据的apk && 用gsensor来判断手机的静和动 && 手机摇一摇 &&气压计的测试应用
- PHP数组的总结
- java 路径问题总结