Падает программма :( . Выполняется, и в момент выхода из функции умирает с Segmentation fault'ом . Коннект к базе проходит успешно, в цикле выводятся на экран данные(все правильно), далее подходит к выходу функции и там Segmntation fault; Т.е. резалт выглядит так : Starting... <data> last_instraction_before segmentation fault Segmentation fault. Сама ф-ция приведенна ниже. main выглядит примерно так : int main () { std::cout << "Starting..." << flush; std::vector<sTPT> rez; my_func ( rez ); std::cout << "ok" << endl; return 0; } #include <ibase.h> #include <stdlib.h> #include <string.h> #include <stdio.h> #include <strings.h> #include "base_func.h" #define SQL_VARCHAR(len) struct {short length; char text[(len)+1];} #define SQL_INT struct{long data;} void my_func ( std::vector<sTPT> &rez ) { isc_expand_dpb ( &dpb, &dpb_length, isc_dpb_user_name,user_name, isc_dpb_password, user_password, NULL ); isc_attach_database ( status_vector, path_to_base.size(), ( char *) path_to_base.c_str(),&db, dpb_length, dpb ); if ( base_have_error ( status_vector, tr_handle, db ) ) return; isc_start_transaction ( status_vector, &tr_handle, 1, &db, sizeof ( tpb ) , tpb ); if ( base_have_error ( status_vector, tr_handle, db ) ) return; XSQLDA *osqlda; isc_stmt_handle stmt = NULL; char str_stmt[128] = {0}; int param = 165; sprintf ( str_stmt, "select * from my_query ( %d )", param ); osqlda = ( XSQLDA * ) malloc ( XSQLDA_LENGTH ( 4 ) ); osqlda->version = SQLDA_VERSION1; osqlda->sqln = 4; osqlda->sqld = 4; isc_dsql_allocate_statement ( status_vector, &db, &stmt ); isc_dsql_prepare ( status_vector, &tr_handle, &stmt, 0, str_stmt, 1, NULL ); isc_dsql_describe ( status_vector, &stmt, 1, osqlda ); SQL_VARCHAR(128) param; SQL_INT id; SQL_VARCHAR(128) name; SQL_INT time; osqlda->sqlvar[0].sqltype = SQL_VARYING; osqlda->sqlvar[0].sqldata = (char *) ¶m; osqlda->sqlvar[1].sqltype = SQL_LONG; osqlda->sqlvar[1].sqldata = ( char * ) &id; osqlda->sqlvar[2].sqltype = SQL_VARYING; osqlda->sqlvar[2].sqldata = (char *) &name; osqlda->sqlvar[3].sqltype = SQL_LONG; osqlda->sqlvar[3].sqldata = ( char * ) &time; isc_dsql_execute ( status_vector, &tr_handle, &stmt, 1, osqlda ); while ( ( fetch_stat = isc_dsql_fetch ( status_vector, &stmt, 1, osqlda ) ) == 0 ) { sTPT buf; buf.param = std::string(param.text, param.length); std::cout << buf.param << endl; buf.id = id.data; std::cout << id.data << endl; buf.name = std::string (name.text, name.length); std::cout << buf.name << endl; buf.time = time.data; std::cout << time.data << endl; rez.push_back ( buf ); } if ( fetch_stat == 100L ) { if ( base_have_error ( status_vector, tr_handle, db ) ) { return; } } isc_commit_transaction ( status_vector, &tr_handle ); isc_detach_database ( status_vector, &db ); isc_dsql_free_statement ( status_vector, &stmt, DSQL_drop ); for ( int i = 0 ; i < Xc ; i++ ) free ( osqlda->sqlvar[i].sqldata ); free ( osqlda ); std::cerr << "last_instraction_before segmentation fault" << endl; }
Ответ на:
комментарий
от mky
Ответ на:
комментарий
от mky
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от mky
Ответ на:
комментарий
от mky
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Сокеты, Передача данных, C/C++ (2006)
- Форум многопоточное копирование фала через сокет (2015)
- Форум mysql++ вопрос по с++ (2009)
- Форум покритикуйте функцию (2009)
- Форум pthread C++ (2004)
- Форум вопрос по С++ (операторные функции) (2008)
- Форум std::cout вместе с std::wcout (2009)
- Форум Продолжим про исключения!! (2007)
- Форум c++, преобразование int в string (2004)
- Форум libxml node value (2006)