(LIBMYSQL.DLL):0xC0000005:Access Violation错误,怎么解决?

czq2011 2006-07-25 01:42:06
在一个函数中几次,调用以上 函数,前面几次都能正确执行。之后就出现以上错误,不知道是怎么回事?
代码:
//类成员函数
BOOL CDatabase::FindSave(char *str)
{
if(mysql_query(&mysql,str))//前面几次调用&mysql内容都正确,之后参数mysql地址改变了,内容都空了,引发以上错误!
return false;
query=mysql_store_result(&mysql);
return true;
}

BOOL CDatabase::SelectRecord(Data_Param *para)
{
// mysql_free_result(query);
unsigned int i=0;
char str[80];
sprintf(str,"select %s from %s where %s",para->select_exp,para->tab_name,para->where_def);
if(!FindSave(str))
{
return false;
}
return true;
}
//调用selectRecord函数!
//Data_Param pSel;
// ... pSel 参数设置 是正确的。得到的sql语句在console中执行正常!
if(!m_pdb->SelectRecord(&pSel))
{
MessageBox("query reviewitem error!");
return false;
}
...全文
808 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hzhxxx 2006-08-02
  • 打赏
  • 举报
回复

还有内存泄漏

http://community.csdn.net/Expert/topic/4920/4920395.xml?temp=.3051874
maquan 2006-07-25
  • 打赏
  • 举报
回复
我觉得 slashjojo(slayer) 指出的问题可能性最大。

char str[80]; 这种写法是典型的“缓冲区溢出”问题的隐患。你就先确认一下生成的 str 字符串的长度嘛。
czq2011 2006-07-25
  • 打赏
  • 举报
回复
slashjojo(slayer),就是在函数入口处查看的mysql,但是我几次调用都是在一个函数作用域中的,前几次都没问题。真是让人费解的。。。
slashjojo 2006-07-25
  • 打赏
  • 举报
回复
debug的时候step by step,watch一下mysql是在那一步改变的.
czq2011 2006-07-25
  • 打赏
  • 举报
回复
sprintf()格式化的字符数组是正确的,我用MessageBox输出的到正确的sql语句。只是mysql参数
的变化让我不懂:
BOOL CDatabase::FindSave(char *str)
{
if(mysql_query(&mysql,str))//前面几次调用&mysql内容都正确,之后参数mysql地址改变了,内容都空了,引发以上错误!
return false;
query=mysql_store_result(&mysql);
return true;
}
slashjojo 2006-07-25
  • 打赏
  • 举报
回复
检查一下你的sql语句有没有缓冲区溢出.

你那个错误是内存访问违例,一般是内存越界了造成的

57,064

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧