Падает программма :( . Выполняется, и в момент выхода из функции
умирает с 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)