原帖
http://bbs.chinaunix.net/viewthread.php?tid=865766&extra=page%3D4環境說明:
OS : Debian Linux testing
Oracle :Oracle 10.2.0.1.0
dmalloc :5.4.2-5 疑問一.
以下代碼OCIEnvCreate, OCIHandleFree是否使用正確 ?
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <dmalloc.h>
#include "oci.h"int main(int argc, char *argv[])
{
OCIEnv *envhp;
if (OCIEnvCreate ( &envhp, (ub4)OCI_DEFAULT, (dvoid *)0,
(dvoid * (*)(dvoid *, size_t)) 0,
(dvoid * (*)(dvoid *, dvoid *, size_t)) 0,
(void (*)(dvoid *, dvoid *)) 0,
(size_t) 0,
(dvoid **) 0)) {
printf("couldn't create environment");
} OCIHandleFree ((dvoid *)envhp, OCI_HTYPE_ENV); exit(0) ;
}
疑問二:
編譯:
$gcc -I /app/oracle/product/10.2.0.1/rdbms/public/ -L /app/oracle/product/10.2.0.1/lib/ -o aa aa.c -ldmalloc -lclntsh$dmalloc -l aa.log all
$DMALLOC_OPTIONS=debug=0xcf66d2b,log=aa.log
$export DMALLOC_OPTIONS
執行後得到aa.log檔. 發現很多沒有釋放的指針 (附檔aa.log.gz)
請幫忙分析一下1165293967: 312: top 10 allocations:
1165293967: 312: total-size count in-use-size count source
1165293967: 312: 408211 3 384987 1 ra=0xb7682d8c
1165293967: 312: 145150 18 145150 18 ra=0xb7c0b866
1165293967: 312: 129404 5 129404 5 ra=0xb7b9e11d
1165293967: 312: 5200 5 5200 5 ra=0xb7bf4ee2
1165293967: 312: 4092 31 3564 27 ra=0xb7bf169e
1165293967: 312: 3468 1 3468 1 ra=0xb7c735db
1165293967: 312: 2080 2 2080 2 ra=0xb7bf5a6e
1165293967: 312: 1408 4 0 0 ra=0xb705da1f
1165293967: 312: 1224 3 408 1 ra=0xb7c6b2ba
1165293967: 312: 706400 214 678731 117 Total of 50
1165293967: 312: Dumping Not-Freed Pointers Changed Since Start:
1165293967: 312: not freed: '0xb6c92008|s1' (103328 bytes) from 'ra=0xb7b9e11d'
1165293967: 312: not freed: '0xb6cac808|s1' (860 bytes) from 'ra=0xb7b9e11d'
1165293967: 312: not freed: '0xb6cacc08|s1' (792 bytes) from 'ra=0xb7b9e11d'
1165293967: 312: not freed: '0xb6cb4008|s1' (2216 bytes) from 'ra=0xb7b9e11d'
1165293967: 312: not freed: '0xb6cb5008|s1' (22208 bytes) from 'ra=0xb7b9e11d'
http://bbs.chinaunix.net/viewthread.php?tid=865766&extra=page%3D4環境說明:
OS : Debian Linux testing
Oracle :Oracle 10.2.0.1.0
dmalloc :5.4.2-5 疑問一.
以下代碼OCIEnvCreate, OCIHandleFree是否使用正確 ?
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <dmalloc.h>
#include "oci.h"int main(int argc, char *argv[])
{
OCIEnv *envhp;
if (OCIEnvCreate ( &envhp, (ub4)OCI_DEFAULT, (dvoid *)0,
(dvoid * (*)(dvoid *, size_t)) 0,
(dvoid * (*)(dvoid *, dvoid *, size_t)) 0,
(void (*)(dvoid *, dvoid *)) 0,
(size_t) 0,
(dvoid **) 0)) {
printf("couldn't create environment");
} OCIHandleFree ((dvoid *)envhp, OCI_HTYPE_ENV); exit(0) ;
}
疑問二:
編譯:
$gcc -I /app/oracle/product/10.2.0.1/rdbms/public/ -L /app/oracle/product/10.2.0.1/lib/ -o aa aa.c -ldmalloc -lclntsh$dmalloc -l aa.log all
$DMALLOC_OPTIONS=debug=0xcf66d2b,log=aa.log
$export DMALLOC_OPTIONS
執行後得到aa.log檔. 發現很多沒有釋放的指針 (附檔aa.log.gz)
請幫忙分析一下1165293967: 312: top 10 allocations:
1165293967: 312: total-size count in-use-size count source
1165293967: 312: 408211 3 384987 1 ra=0xb7682d8c
1165293967: 312: 145150 18 145150 18 ra=0xb7c0b866
1165293967: 312: 129404 5 129404 5 ra=0xb7b9e11d
1165293967: 312: 5200 5 5200 5 ra=0xb7bf4ee2
1165293967: 312: 4092 31 3564 27 ra=0xb7bf169e
1165293967: 312: 3468 1 3468 1 ra=0xb7c735db
1165293967: 312: 2080 2 2080 2 ra=0xb7bf5a6e
1165293967: 312: 1408 4 0 0 ra=0xb705da1f
1165293967: 312: 1224 3 408 1 ra=0xb7c6b2ba
1165293967: 312: 706400 214 678731 117 Total of 50
1165293967: 312: Dumping Not-Freed Pointers Changed Since Start:
1165293967: 312: not freed: '0xb6c92008|s1' (103328 bytes) from 'ra=0xb7b9e11d'
1165293967: 312: not freed: '0xb6cac808|s1' (860 bytes) from 'ra=0xb7b9e11d'
1165293967: 312: not freed: '0xb6cacc08|s1' (792 bytes) from 'ra=0xb7b9e11d'
1165293967: 312: not freed: '0xb6cb4008|s1' (2216 bytes) from 'ra=0xb7b9e11d'
1165293967: 312: not freed: '0xb6cb5008|s1' (22208 bytes) from 'ra=0xb7b9e11d'
我的這段測試代碼是單線程的.不用OCI又用什麼呢?
程序又不是java寫的.郁悶