Corruption in C++ constructor

navin p <[email protected]>
Newsgroups gmane.comp.gdb.devel,gmane.comp.gcc.help
Message-ID <CAKVd3pWpoa+_Af76DBNYg5zauCKjnyMTjGdM=Htr7KrmEDcueg@mail.gmail.com>
Hi,
 Sorry for the long post but i'm stuck . Can someone help me ?

 I'm debugging a multithreaded program. I've inlined the headerfile below.
Now when i print selectConstruct i get all the vectors with M_start as 0 .

Now when i call the constructor ie when the selectConstruct is passed
by value to the function fetch_custom_sql_query to create a temporary
object it changes the M_start and M_finish as below in the second
snapshot print *this.

As you can see limit is -1 but it is corrupted after the call to
constructor ie p *this.

Is this a corruption , how do i debug this ?

2873            int rc =
_db->fetch_custom_sql_query(rwc.GetQueryName(),selectConstruct,
HandleCustomSqlQueryResponse, (void*)&holder);
(gdb) p selectConstruct
$1 = {distinct = false, colsToBeSelected = {cols =
{<std::_Vector_base<dbCol, std::allocator<dbCol> >> = {_M_impl =
{<std::allocator<dbCol>> = {<__gnu_cxx::new_allocator<dbCol>> = {<No
data fields>}, <No data fields>}, _M_start = 0x0, _M_finish = 0x0,
_M_end_of_storage = 0x0}}, <No data fields>}}, tableName = {static
npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> =
{<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data
fields>}, _M_p = 0x3dd36f32d8 ""}}, where = {whereExprs =
{<std::_Vector_base<whereExpr, std::allocator<whereExpr> >> = {_M_impl
= {<std::allocator<whereExpr>> =
{<__gnu_cxx::new_allocator<whereExpr>> = {<No data fields>}, <No data
fields>}, _M_start = 0x0, _M_finish = 0x0, _M_end_of_storage = 0x0}},
<No data fields>}, ops = {<std::_Vector_base<adjoinOperator,
std::allocator<adjoinOperator> >> = {_M_impl =
{<std::allocator<adjoinOperator>> =
{<__gnu_cxx::new_allocator<adjoinOperator>> = {<No data fields>}, <No
data fields>}, _M_start = 0x0, _M_finish = 0x0, _M_end_of_storage =
0x0}}, <No data fields>}, namespaceCounts =
{<std::_Vector_base<unsigned int, std::allocator<unsigned int> >> =
{_M_impl = {<std::allocator<unsigned int>> =
{<__gnu_cxx::new_allocator<unsigned int>> = {<No data fields>}, <No
data fields>}, _M_start = 0x0, _M_finish = 0x0, _M_end_of_storage =
0x0}}, <No data fields>}, useAsON = false}, groupBy = {cols =
{<std::_Vector_base<dbCol, std::allocator<dbCol> >> = {_M_impl =
{<std::allocator<dbCol>> = {<__gnu_cxx::new_allocator<dbCol>> = {<No
data fields>}, <No data fields>}, _M_start = 0x0, _M_finish = 0x0,
_M_end_of_storage = 0x0}}, <No data fields>}}, orders = {orders =
{<std::_Vector_base<orderingTerm, std::allocator<orderingTerm> >> =
{_M_impl = {<std::allocator<orderingTerm>> =
{<__gnu_cxx::new_allocator<orderingTerm>> = {<No data fields>}, <No
data fields>}, _M_start = 0x0, _M_finish = 0x0, _M_end_of_storage =
0x0}}, <No data fields>}}, limit = -1}
(gdb) stepi
0x00007ffff0df9b49      2873            int rc =
_db->fetch_custom_sql_query(rwc.GetQueryName(),selectConstruct,
HandleCustomSqlQueryResponse, (void*)&holder);
(gdb) stepi
0x00007ffff0df9b50      2873            int rc =
_db->fetch_custom_sql_query(rwc.GetQueryName(),selectConstruct,
HandleCustomSqlQueryResponse, (void*)&holder);
(gdb) stepi
0x00007ffff0df9b53      2873            int rc =
_db->fetch_custom_sql_query(rwc.GetQueryName(),selectConstruct,
HandleCustomSqlQueryResponse, (void*)&holder);
(gdb) stepi
0x00007ffff0df9b5b      2873            int rc =
_db->fetch_custom_sql_query(rwc.GetQueryName(),selectConstruct,
HandleCustomSqlQueryResponse, (void*)&holder);
(gdb) stepi
0x00007ffff0df9b5e      2873            int rc =
_db->fetch_custom_sql_query(rwc.GetQueryName(),selectConstruct,
HandleCustomSqlQueryResponse, (void*)&holder);
(gdb) stepi
0x00007ffff0da8000 in simpleSelectConstruct::simpleSelectConstruct ()
from /opt/OV/lbin/OpsAgt/libDMLSegment.so
(gdb) stepi
simpleSelectConstruct::simpleSelectConstruct (this=0x7fffdbffdbb0) at
/home/parakkal/COLLABNET_11.10_NEW/hpsw-oa/AgentFramework/cpp/src/include/OpsAgt/DBsupports.h:170
170     class simpleSelectConstruct{
/include/OpsAgt/DBsupports.h:170
170     class simpleSelectConstruct{
(gdb) p *this
$2 = {distinct = false, colsToBeSelected = {cols =
{<std::_Vector_base<dbCol, std::allocator<dbCol> >> = {_M_impl =
{<std::allocator<dbCol>> = {<__gnu_cxx::new_allocator<dbCol>> = {<No
data fields>}, <No data fields>}, _M_start = 0x0, _M_finish = 0x0,
_M_end_of_storage = 0x0}}, <No data fields>}}, tableName = {static
npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> =
{<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data
fields>}, _M_p = 0x0}}, where = {whereExprs =
{<std::_Vector_base<whereExpr, std::allocator<whereExpr> >> = {_M_impl
= {<std::allocator<whereExpr>> =
{<__gnu_cxx::new_allocator<whereExpr>> = {<No data fields>}, <No data
fields>}, _M_start = 0x0, _M_finish = 0x0, _M_end_of_storage = 0x0}},
<No data fields>}, ops = {<std::_Vector_base<adjoinOperator,
std::allocator<adjoinOperator> >> = {_M_impl =
{<std::allocator<adjoinOperator>> =
{<__gnu_cxx::new_allocator<adjoinOperator>> = {<No data fields>}, <No
data fields>}, _M_start = 0x0, _M_finish = 0x3dd34bd704,
_M_end_of_storage = 0x7ffff7ca52b0}}, <No data fields>},
namespaceCounts = {<std::_Vector_base<unsigned int,
std::allocator<unsigned int> >> = {_M_impl = {<std::allocator<unsigned
int>> = {<__gnu_cxx::new_allocator<unsigned int>> = {<No data
fields>}, <No data fields>}, _M_start = 0x7fffdbffe910, _M_finish =
0x6, _M_end_of_storage = 0x4e}}, <No data fields>}, useAsON = false},
groupBy = {cols = {<std::_Vector_base<dbCol, std::allocator<dbCol> >>
= {_M_impl = {<std::allocator<dbCol>> =
{<__gnu_cxx::new_allocator<dbCol>> = {<No data fields>}, <No data
fields>}, _M_start = 0x7fffdbffe910, _M_finish = 0x0,
_M_end_of_storage = 0x7ffff6f54d1f}}, <No data fields>}}, orders =
{orders = {<std::_Vector_base<orderingTerm,
std::allocator<orderingTerm> >> = {_M_impl =
{<std::allocator<orderingTerm>> =
{<__gnu_cxx::new_allocator<orderingTerm>> = {<No data fields>}, <No
data fields>}, _M_start = 0x7ffff7ca52b0, _M_finish = 0x7ffff6f5584d,
_M_end_of_storage = 0x5509f0}}, <No data fields>}}, limit =
-603988688}
(gdb) stepi
0x00007ffff0e11892      170     class simpleSelectConstruct{
(gdb) stepi
0x00007ffff0e11894      170     class simpleSelectConstruct{
(gdb) stepi
0x00007ffff0e11896      170     class simpleSelectConstruct{
(gdb) stepi
0x00007ffff0e11898      170     class simpleSelectConstruct{
(gdb) p *this
$3 = {distinct = false, colsToBeSelected = {cols =
{<std::_Vector_base<dbCol, std::allocator<dbCol> >> = {_M_impl =
{<std::allocator<dbCol>> = {<__gnu_cxx::new_allocator<dbCol>> = {<No
data fields>}, <No data fields>}, _M_start = 0x0, _M_finish = 0x0,
_M_end_of_storage = 0x0}}, <No data fields>}}, tableName = {static
npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> =
{<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data
fields>}, _M_p = 0x0}}, where = {whereExprs =
{<std::_Vector_base<whereExpr, std::allocator<whereExpr> >> = {_M_impl
= {<std::allocator<whereExpr>> =
{<__gnu_cxx::new_allocator<whereExpr>> = {<No data fields>}, <No data
fields>}, _M_start = 0x0, _M_finish = 0x0, _M_end_of_storage = 0x0}},
<No data fields>}, ops = {<std::_Vector_base<adjoinOperator,
std::allocator<adjoinOperator> >> = {_M_impl =
{<std::allocator<adjoinOperator>> =
{<__gnu_cxx::new_allocator<adjoinOperator>> = {<No data fields>}, <No
data fields>}, _M_start = 0x0, _M_finish = 0x3dd34bd704,
_M_end_of_storage = 0x7ffff7ca52b0}}, <No data fields>},
namespaceCounts = {<std::_Vector_base<unsigned int,
std::allocator<unsigned int> >> = {_M_impl = {<std::allocator<unsigned
int>> = {<__gnu_cxx::new_allocator<unsigned int>> = {<No data
fields>}, <No data fields>}, _M_start = 0x7fffdbffe910, _M_finish =
0x6, _M_end_of_storage = 0x4e}}, <No data fields>}, useAsON = false},
groupBy = {cols = {<std::_Vector_base<dbCol, std::allocator<dbCol> >>
= {_M_impl = {<std::allocator<dbCol>> =
{<__gnu_cxx::new_allocator<dbCol>> = {<No data fields>}, <No data
fields>}, _M_start = 0x7fffdbffe910, _M_finish = 0x0,
_M_end_of_storage = 0x7ffff6f54d1f}}, <No data fields>}}, orders =
{orders = {<std::_Vector_base<orderingTerm,
std::allocator<orderingTerm> >> = {_M_impl =
{<std::allocator<orderingTerm>> =
{<__gnu_cxx::new_allocator<orderingTerm>> = {<No data fields>}, <No
data fields>}, _M_start = 0x7ffff7ca52b0, _M_finish = 0x7ffff6f5584d,
_M_end_of_storage = 0x5509f0}}, <No data fields>}}, limit =
-603988688}
(gdb)


#ifndef my_db_supports_h
#define my_db_supports_h

#include <string>
#include <vector>
namespace std {}
using namespace std;

#include "OvXplStr/NlString.h"

#if defined(WINDOWS)
  #if defined(EXPORT_LIB)
    #define DBSupportsInterface __declspec(dllexport)
  #else
    #define DBSupportsInterface //__declspec(dllimport)
  #endif
#else
  #define DBSupportsInterface
#endif

typedef enum
{
 data_type_integer = 0,
 data_type_text,
 data_type_real,
 data_type_numeric,
 data_type_time,
 data_type_autokey,
 data_type_none
} db_ColumnDataType;

typedef enum
{
 ascending = 0,
 descending
} order_e;

typedef enum
{
 is_equal_to = 0,
 is_not_equal_to,
 is_greater_than,
 is_greater_than_or_equal,
 is_less_than,
 is_less_than_or_equal,
 is_in
} whereOperator;

typedef enum
{
 _AND_ = 100,
 _OR_
} adjoinOperator;

class dbColumnDef {

 protected:
   OvXplStr::String_t name;
   db_ColumnDataType type;
   bool isPartOfPrimaryKey;
   int isPartOfUniqueness;
   bool isForeignKey;
   OvXplStr::String_t foreignTableName;
   OvXplStr::String_t foreignColumnName;

 public:

   DBSupportsInterface dbColumnDef();
   DBSupportsInterface dbColumnDef(const dbColumnDef & _dbCol);
   DBSupportsInterface void setName(OvXplStr::String_t _name);
   DBSupportsInterface void setType(db_ColumnDataType _type);
   DBSupportsInterface void setIsPartOfPrimaryKey(bool _v);
   DBSupportsInterface void setIsPartOfUniqueness(int _v);
   DBSupportsInterface void setForeignKeyReference(OvXplStr::String_t
_fTableName, OvXplStr::String_t _fColName);

   DBSupportsInterface OvXplStr::String_t getName();
   DBSupportsInterface db_ColumnDataType getType();
   DBSupportsInterface bool getIsPartOfPrimaryKey();
   DBSupportsInterface int getIsPartOfUniqueness();
   DBSupportsInterface bool getIsForeignKey();
   DBSupportsInterface OvXplStr::String_t getForeignTableName();
   DBSupportsInterface OvXplStr::String_t getForeignColumnName();

};

class dbColumnDefs{
   private:
      vector<dbColumnDef> cols;

   public:
      DBSupportsInterface void addColumnDef(dbColumnDef _col);
      DBSupportsInterface dbColumnDef& getColumnDefAt(int i);
      DBSupportsInterface int getNumColumnDefs();
};

class dbCol{
 public:
   OvXplStr::String_t colName;
   db_ColumnDataType type;
   DBSupportsInterface dbCol();
};

class dbColValue: public dbCol{
 public:
   OvXplStr::String_t value;
   DBSupportsInterface dbColValue();
};

class dbColValues{

 protected:
   vector<dbColValue> vals;

 public:
   DBSupportsInterface void addValue(dbColValue _val);
   DBSupportsInterface dbColValue & getValueAt(int i);
   DBSupportsInterface int getNumValues();
};

class dbCols{

 protected:
   vector<dbCol> cols;

 public:
   DBSupportsInterface void addColumn(dbCol _val);
   DBSupportsInterface dbCol & getColumnAt(int i);
   DBSupportsInterface int getNumColumns();
};

class whereExpr{
 public:
   dbCol col;
   whereOperator op;
   OvXplStr::String_t value;
   vector<OvXplStr::String_t> is_in_list;
};

class orderingTerm{
 public:
   dbCol col;
   order_e order;
};

class orderBy{
 public:
   vector<orderingTerm> orders;
   DBSupportsInterface void addOrder(orderingTerm _o);
   OvXplStr::String_t getOrderByConstruct();
};

class whereConstruct{
 protected:
   vector<whereExpr> whereExprs;
   vector<adjoinOperator> ops;
   vector<unsigned int> namespaceCounts;
   bool useAsON;
 public:
   DBSupportsInterface whereConstruct(bool b = false) {
      useAsON=b;
   }
   DBSupportsInterface void addWhereExpr(whereExpr _w);
   DBSupportsInterface void addAdjoiningOp(adjoinOperator _op);
   DBSupportsInterface void addNameSpaceBoundary(unsigned int);
   DBSupportsInterface OvXplStr::String_t getWhereConstruct();
   DBSupportsInterface size_t getNumWhereExprs();
   DBSupportsInterface bool UseAsON();
};

class simpleSelectConstruct{

 public:
   DBSupportsInterface simpleSelectConstruct()
   {
      distinct=false;
      limit=-1;
   }
   bool distinct;
   dbCols colsToBeSelected;
   string tableName;
   whereConstruct where;
   dbCols groupBy;
   orderBy orders;
   int limit;
};

class dbUtils
{
public:
    static OvXplStr::String_t makeEscapedString(OvXplStr::String_t
unEscapedStr);
};

#endif /* my_db_supports_h */
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.