程序调用ORACLE的OCCI接口的内部函数报错,请大侠指导!
主机:HP-UX B.11.31 U ia64 (td)
用gdb调试程序的时候报下面错误,请大侠指导一下。谢谢!
在调用ORACLE的OCCI接口的内部函数报的错误:
m_pStmt = m_pDBConn->m_pConn->createStatement(strSQL);
程序运行调试的日志:
CDataBase Copy Constructor Called!
aCC runtime: pure virtual function called for class "oracle::occi::Connection".
Program received signal SIGABRT, Aborted
si_code: 0 - .
0x9fffffffbd20c970:0 in _lwp_kill+0x30 () from /usr/lib/hpux64/libpthread.so.1
(gdb) where
#0 0x9fffffffbd20c970:0 in _lwp_kill+0x30 ()
from /usr/lib/hpux64/libpthread.so.1
#1 0x9fffffffbd1772a0:0 in pthread_kill+0x990 ()
from /usr/lib/hpux64/libpthread.so.1
#2 0x9fffffffbc7f8080:0 in raise+0xe0 () from /usr/lib/hpux64/libc.so.1
#3 0x9fffffffbc9089b0:0 in abort+0x170 () from /usr/lib/hpux64/libc.so.1
#4 0x9fffffffbcf55c00:0 in __cxa_pure_virtual+0xe0 ()
from /usr/lib/hpux64/libCsup.so.1
#5 0x4000000000121010:0 in CBindSQL::Open (this=0x9fffffffffffc580,
strSQL=@0x9fffffffffffc568, eSQLType=0) at COracleDB.cpp:2706
#6 0x40000000001ccf80:0 in O_RecreateFile::LoadFileFormate (
this=0x9fffffffffffe4b0, nDsID=1501) at o_recreatefile.cpp:33
#7 0x4000000000165000:0 in main (argc=7, argv=0x9ffffffffffff168)
at DSAllot.cpp:185
(gdb) bt
#0 0x9fffffffbd20c970:0 in _lwp_kill+0x30 ()
from /usr/lib/hpux64/libpthread.so.1
#1 0x9fffffffbd1772a0:0 in pthread_kill+0x990 ()
from /usr/lib/hpux64/libpthread.so.1
#2 0x9fffffffbc7f8080:0 in raise+0xe0 () from /usr/lib/hpux64/libc.so.1
#3 0x9fffffffbc9089b0:0 in abort+0x170 () from /usr/lib/hpux64/libc.so.1
#4 0x9fffffffbcf55c00:0 in __cxa_pure_virtual+0xe0 ()
from /usr/lib/hpux64/libCsup.so.1
#5 0x4000000000121010:0 in CBindSQL::Open (this=0x9fffffffffffc580,
strSQL=@0x9fffffffffffc568, eSQLType=0) at COracleDB.cpp:2706
#6 0x40000000001ccf80:0 in O_RecreateFile::LoadFileFormate (
this=0x9fffffffffffe4b0, nDsID=1501) at o_recreatefile.cpp:33
#7 0x4000000000165000:0 in main (argc=7, argv=0x9ffffffffffff168)
at DSAllot.cpp:185
[解决办法]
char sSql[1024];
//CRecordset Rs(_mDB);
CBindSQL Rs(_pDb);
try
{
sprintf(sSql,"SELECT * FROM TABLE_DS_DEF A WHERE A.DS_ID = %d ", nDsID );
这里可能会出点问题,因为sSql没有初始化,格式化后,这个字串的内容可能因为没结束符而随机,你检查下,或者在sprintf用memset初始化一下。