JNI中C++部分的EXCEPTION_ACCESS_VIOLATION (0xc0000005)问题,达人帮忙分析一下
我在做ExchangeServer相关的开发工作,读取全球通讯簿时报EXCEPTION_ACCESS_VIOLATION (0xc0000005)错,查看LOG发现,我只能读到第一条记录的PR_EMS_AB_HOME_MTA,而从第二条开始只要一读取PR_EMS_AB_HOME_MTA字段信息就报错,不读PR_EMS_AB_HOME_MTA自读,程序就正常。我把错误日志和相关代码贴出来,达人帮忙分析一下,先谢谢啦。
**************相关 C++ CODE*********************************
void GetAddressBookItems(LPMAPISESSION lpSession, vector<CAddressBookItem *> &abItem)
{
hRes = HrQueryAllRows(lpContentsTable, (LPSPropTagArray)&sptCols, NULL, NULL, 0, &pRow);
if(S_OK!=hRes)
{
pException=new CMapiException(ERROR_MAPI_QUERY_ROW_FAIL,string("MapiFunctions.cpp:OpenMessageStoreGUID:HrQueryAllRows"));
goto end;
}
for(ulRowNum=0; ulRowNum < pRow->cRows; ulRowNum ++)
{
pabi = new CAddressBookItem();
pabi->setAccount(pRow->aRow[ulRowNum].lpProps[ACCOUNT].Value.lpszA);
pabi->setDisplayName(pRow->aRow[ulRowNum].lpProps[NAME].Value.lpszA);
//pabi->setEmail(pRow->aRow[ulRowNum].lpProps[EMAIL].Value.lpszA);
pabi->setSmtpAddress(pRow->aRow[ulRowNum].lpProps[SMTPMAIL].Value.lpszA);
//就是下面这句出问题
pabi->setAbHomeMTA(pRow->aRow[ulRowNum].lpProps[ABHOMEMTA].Value.lpszA);
//如果只像下面这样,读第一条也能正常跑起来
//pabi->setAbHomeMTA(pRow->aRow[0].lpProps[ABHOMEMTA].Value.lpszA);
abItem.push_back(pabi);
}
end:
......
}