Re: I need help, about c++ pointer

Поиск
Список
Период
Сортировка
От Quan Zongliang
Тема Re: I need help, about c++ pointer
Дата
Msg-id 20090716073906.4DC8.4125B4E5@gmail.com
обсуждение исходный текст
Ответ на Re: I need help, about c++ pointer  (Guillaume Lelarge <guillaume@lelarge.info>)
Список pgadmin-support
Another pointer error.

ponters are created by:   int tablecount = 0;   SQLWCHAR **tabledata, ***tablelist;
   while (true)   {       sqlrc = SQLFetch(tableshstmt);       if (sqlrc != SQL_SUCCESS && sqlrc !=
SQL_SUCCESS_WITH_INFO)          break;
 
       if (m_dsnmaxcatnamelen)       {           SQLGetData(tableshstmt, 1, SQL_C_WCHAR, catname,
sizeof(SQLWCHAR)*m_dsnmaxcatnamelen,NULL);           catnameptr = new SQLWCHAR[wcslen(catname)+1];
wcscpy(catnameptr,catname);       }       else           catnameptr = NULL;
 
       if (m_dsnmaxschemnamelen)       {           SQLGetData(tableshstmt, 2, SQL_C_WCHAR, schemname,
sizeof(SQLWCHAR)*m_dsnmaxschemnamelen,NULL);           schemnameptr = new SQLWCHAR[wcslen(schemname)+1];
wcscpy(schemnameptr,schemname);       }       else           schemnameptr = NULL;
 
       SQLGetData(tableshstmt, 3, SQL_C_WCHAR, tablename, sizeof(SQLWCHAR)*m_dsnmaxtablenamelen, NULL);
tablenameptr= new SQLWCHAR[wcslen(tablename)+1];       wcscpy(tablenameptr, tablename);
 
       tabledata = new SQLWCHAR *[3];       tabledata[0] = catnameptr;       tabledata[1] = schemnameptr;
tabledata[2]= tablenameptr;
 
       tablelist = m_tablelist;       m_tablelist = new SQLWCHAR **[tablecount+1];       if (tablecount)
memcpy(m_tablelist,tablelist, sizeof(SQLWCHAR**)*tablecount);       m_tablelist[tablecount] = tabledata;       if
(tablelist)          delete[] tablelist;
 
       tablecount++;   }
   tablelist = m_tablelist;   m_tablelist = new SQLWCHAR **[tablecount+1];   if (tablecount)       memcpy(m_tablelist,
tablelist,sizeof(SQLWCHAR**)*tablecount);   m_tablelist[tablecount] = NULL;   if (tablelist)       delete[] tablelist;
 
(m_tablelist is defined in header file: SQLWCHAR ***m_tablelist)
Cleared by:   SQLWCHAR ***tablelist;   for (tablelist=m_tablelist; *tablelist; tablelist++)   {       if
((*tablelist)[0])          delete[] (*tablelist)[0];       if ((*tablelist)[1])           delete[] (*tablelist)[1];
 delete[] (*tablelist)[2];
 
       delete[] (*tablelist);   }
   delete[] m_tablelist;

When second lood try to delete pointer,
system said that memory seems has been deleted.

My pgsql test db has 21 tables,
when connect to it with ODBC I always get this error.
But a excel doc has 3 sheets(will be considered as 3 tables in ODBC driver)
no error occur.

-----------------------------------------------
Quan Zongliang
quanzongliang@gmail.com



В списке pgadmin-support по дате отправления:

Предыдущее
От: Quan Zongliang
Дата:
Сообщение: Re: I need help, about c++ pointer
Следующее
От: Angus Carr
Дата:
Сообщение: Roundtrip SQL bug/ unanticipated behaviour