mam klopot z wyciekami pamieci przy wysylaniu zapytac i.open (size, query, db );
prosilbym o pomoc osoby, ktore uzywaja tej biblioteki. wszystko chodzi pieknie z tym wyjatkiem, ze po kazdym zapytaniu lub odebraniu danych z servera (nie wiem dokladnie kiedy to sie dzieje) moj proces zajmuje wiecej o kilkadziesiat kilobajtow pamieci w systemie.
wiem, ze ponownego otwarcia strumienia dokonuje sie tylko, kiedy zostal zamkniety, w przeciwnym wypadku mozna w jakis sposob uzyc i.rewind() ale u mnie program sie wywala. dostalem porade jak ma wygladac mniej wiecej zapytanie, nie powodujace wyciekow. moje, z ktorym mam problemy mniej wiecej wyglada tak:
otl_connect db; //global defined objects
otl_stream i;
char remarks[600];
otl_connect::otl_initialize(); //initialisation
i.set_all_column_types(otl_all_num2str | otl_all_date2str );
db.rlogon("UID=%s;PWD=%s;DSN=%s", SqlUser, SqlPass, SqlServerName"); //login
try
{
i.open (50, "select REMARKS from TEL_BOOK where ID = 1", db ); //query
while (i.eof() == FALSE)
{
i >>remarks; //retrieving data with memory leak
...
}
}
catch (otl_exception &p )
{
...
}
//*********************************************************
natomiast nie powodujace wyciekow ma wygladac tak:
otl_connect db;
otl_stream i;
char remarks[600];
...
int main(...)
{
otl_connect::otl_initialize();
i.set_all_column_types(otl_all_num2str | otl_all_date2str );
try{
db.rlogon("userid/passwd@dsn");
if(!i.good()){
// stream is closed, let's open it
i.open (50,
"select REMARKS from TEL_BOOK where ID = 1",
db );
}else{
// stream's already open, let's just rexecute the statement by
// calling otl_stream::rewind(), see the manual for more detail.
i.rewind();
}
while(!i.eof()){
i >> remarks;
}
}
catch (otl_exception &p ){
...
}
db.logoff();
return 0;
}
klopot w tym ze nie znalazlem nigdzie informacji o wykorzystaniu i.rewind()
po wstawieniu w/w poprawek program mi sie po prostu od razu wywala. nie wiem o co dokladnie chodzi.
z gory dziekuje i pozdrawiam
Mariusz