tester.exe中0x00b21840处的未处理异常:0xC0000005:访问冲突读取位置0x00000000

时间:2011-03-11 16:26:59

标签: c++ mysql

BOOL bLoadActions()
{
    int iIndex = 0;
    int iRows;
    int iFields;
    MYSQL_ROW myRow;
    MYSQL_FIELD* field [200];

    for (int a = 0; a < 200; a++)
        field[a] = NULL;

mysql_query(con, "SELECT * FROM `cq_action`;");
res= mysql_store_result(con);
if ((iRows = (int)mysql_num_rows(res)) > 0)
{
    iFields = (WORD)mysql_num_fields(res);
    for(int b = 0; b < iRows; b++)
    {
        myRow = mysql_fetch_row(res);//<=== error here
        mysql_field_seek(res, 0);
        for(int f = 0; f < iFields; f++)
        {
            field[f] = mysql_fetch_field(res);
            if(field[f]) {
            if(!strcmp(field[f]->name, "id"))
            {
                iIndex++;
                m_pActionList[iIndex] = new class CAction;
                m_pActionList[iIndex]->id = atoi(myRow[f]);
                m_pActionList[iIndex]->index = iIndex;
            }
            else if(!strcmp(field[f]->name, "param"))
            {
                m_pActionList[iIndex]->param = new char[strlen(myRow[f])+1];
                m_pActionList[iIndex]->param[strlen(myRow[f])] = 0;
                memcpy(m_pActionList[iIndex]->param, myRow[f], strlen(myRow[f]));
            }
            else if(!strcmp(field[f]->name, "type"))
                m_pActionList[iIndex]->type = atoi(myRow[f]);
            else if(!strcmp(field[f]->name, "id_next"))
                m_pActionList[iIndex]->idnext = atoi(myRow[f]);
            else if(!strcmp(field[f]->name, "id_nextfail"))
                m_pActionList[iIndex]->idfail = atoi(myRow[f]);
            else if(!strcmp(field[f]->name, "data"))
                m_pActionList[iIndex]->data = atoi(myRow[f]);
            }
            else{
                if(field[f]=NULL)
                    cout<<"error"<<endl;
            }
        }
    }
}

return 0;

} idk每件事似乎都很好....但是我得到了这个错误

Unhandled exception at 0x00b21840 in tester.exe: 0xC0000005: Access violation reading location 0x00000000.

编辑后,错误发生在myRow = mysql_fetch_row(res);//<=== error here

2 个答案:

答案 0 :(得分:1)

这意味着当解除引用时,其中一个指针为null。连接一个调试器,它会告诉你错误发生在哪一行。

答案 1 :(得分:0)

正如其他人所说,您最有可能取消引用来自NULL的{​​{1}}指针。您应该将代码更改为以下内容:

mysql_fetch_field