c/c++连接mysql时,报 0xC0000005: 读取位置 0x00000000 时发生访问冲突

gordon0315 发布于 2013/12/26 16:58
阅读 1K+
收藏 0
int rc =0 ;
const char* host = "localhost";
const char* root = "root";
const char* passwd = "123456";
const char* db = "zn_face_certify_db";
unsigned int port = 3306;

MYSQL* mysql = NULL;

//memset(mysql,'\0',sizeof(MYSQL));//报0xC0000005: 读取位置 0x00000000 时发生访问冲突

//初始化mysql
if (mysql_init(mysql)!=NULL){  //正常初始化
    MessageBox(NULL,L"mysql_init success!",L"znitech",MB_OK);    
}else{
     MessageBox(NULL,L"mysql_init failed!",L"znitech",MB_OK);
     return -52;
}

if(mysql_real_connect(mysql, host, root, passwd, db,port, NULL, 0)!=NULL){

       //0xC0000005: 读取位置 0x00000000 时发生访问冲突

    MessageBox(NULL,L"mysql_real_connect success!",L"znitech",MB_OK);
}else{
     MessageBox(NULL,L"mysql_real_connect failed!",L"znitech",MB_OK);
    mysql_close(mysql);
    return -54;
}

错误点:

执行数据库连接(mysql_real_connect(mysql, host, root, passwd, db,port, NULL, 0))函数时,报0xC0000005: 读取位置 0x00000000 时发生访问冲突错误,断点截图如下:


各位同仁,您知道这个问题怎么解决么?

先谢了!

加载中
0
狼来了而已
狼来了而已

不可以使用指针传递给mysql_init,可以这样

MYSQL mysql;

mysql_init(&mysq);

狼来了而已
狼来了而已
回复 @gordon0315 : mysql指针传递到mysql_init内部后相当于有一个_mysql = mysql;然后为_mysql分配内存指向了某段地址,但是mysql还是NULL,所以这样不行。你看看参数传递的一些基础知识吧
g
gordon0315
就是这个问题,发完帖子后就找到原因了。只是不知道为什么不可以使用指针
0
学习重要
学习重要
你沒分配空間還是個空指針,memset個啥?
0
地瓜儿
地瓜儿
必须分配内存  才能用 memset为内存清零;所以会报内存读取错误。
0
中山野鬼
中山野鬼

引用来自“地瓜儿”的答案

必须分配内存  才能用 memset为内存清零;所以会报内存读取错误。
能出这种错误,还不知道原因的,仍然继续折腾类似这样应用开发的,还真不容易。哈。顺带建议楼主,先做些简单的,把基本功搞扎实。。。
g
gordon0315
当初用memset的目的就是想知道mysql在初始化函数中有没有被初始化,现在看来位置放的不对。不过也正是这让我想起了初始化函数参数的问题。谢谢给位仁兄啊
返回顶部
顶部