而在Valgrind的檢查代碼,我得到這個錯誤:OCILIB - 源和目標重疊,memcpy的
==19985== Source and destination overlap in memcpy(0x6d3c328, 0x6d3c328, 5)
==19985== at 0x4A24F66: _intel_fast_memcpy (mc_replace_strmem.c:894)
==19985== by 0x551A6D7: kpufprow (in /opt/oracle/product/10.2/lib/libclntsh.so.10.1)
==19985== by 0x5517FDE: kpufch0 (in /opt/oracle/product/10.2/lib/libclntsh.so.10.1)
==19985== by 0x5516CB6: kpufch (in /opt/oracle/product/10.2/lib/libclntsh.so.10.1)
==19985== by 0x540CA2F: OCIStmtFetch2 (in /opt/oracle/product/10.2/lib/libclntsh.so.10.1)
==19985== by 0x4CDAF6E: OCI_FetchData (resultset.c:506)
==19985== by 0x4CDB405: OCI_FetchNext (resultset.c:1117)
==19985== by 0x402899: buildQotHash (c4.c:140)
==19985== by 0x4036F6: main (c4.c:469)
我附加片段。它是提到的功能buildQotHash
的一部分。我已標記140行。
OCI_Connection* cn;
OCI_Statement* st;
OCI_Resultset* rs;
if (!OCI_Initialize(err_handler, NULL, OCI_ENV_DEFAULT))
return EXIT_FAILURE;
cn = OCI_ConnectionCreate("db", "user", "pass", OCI_SESSION_DEFAULT);
st = OCI_StatementCreate(cn);
char query[5000];
//here def of query
OCI_ExecuteStmt(st, query);
rs = OCI_GetResultset(st);
int i = 1;
int j = 0;
while (OCI_FetchNext(rs))<--- here is line 140
{}
我不想惹OCILIB
。我可以在lib之外修復它嗎?