bitte löschen

Das Forum für Programmierer und Systemadmins. Von Shell-, Perl- und PHP-Scripts bis zur objektorientierten Programmierung mit C++.

bitte löschen

Beitragvon michaelw » Mi 22 Mär, 2006 02:14

Ich habe da diese gekürzte Funktion die überprüfen soll ob es das richtige Anwendungs-Fenster ist:
Es soll dabei ein Text ("Telefonbuch") mit einem im p enthaltenen character array namens szModuleName verglichen werden.
Leider gibt es auch viele Fälle wo jedoch ausgerechnet p->szModuleName als einziges Element in p leer ist und dann beim Ausführen der Funktion der Visual Studio 2005 Debugger abbricht und sich beschwert das man auf ein nicht existierendes Listen Element zugreifen versucht oder so ähnlich.

Wie kann ich nun vor dem Arbeiten damit gefahrlos überprüfen ob ich auf p->szModuleName zugreifen kann ? Gibt es in C++ eine Funktion mit der ich nachschauen kann ob ein Element existiert, leer ist oder was auch immer. Alles was ich jedenfalls probiert habe hat ebenfalls den oben erwähnten Debugger Abbruch verursacht.

Code: Alles auswählen
bool WindowProve::IsItMin( HWND hWnd )
{
   std::list< WNDDATA >::iterator   p;
   char szWndText[ 260 ];
   
   strcpy(szWndText,"Telefonbuch");
   p = WinFind( hWnd );
   
   if(!strcmp(szWndText ,p->szModuleName))   
      return false;

   return true;
}
Zuletzt geändert von michaelw am Mo 27 Mär, 2006 22:28, insgesamt 2-mal geändert.
michaelw
Senior Board-Mitglied
Senior Board-Mitglied
 
Beiträge: 400
Registriert: So 24 Okt, 2004 04:48

Beitragvon superracer » Mi 22 Mär, 2006 02:29

auf die schnelle würd ich auf das tippen:
Code: Alles auswählen
if (p->szModuleName && !strcmp(szWndText, p->szModuleName))

oder:
Code: Alles auswählen
if (!p->szModuleName || !strcmp(szWndText, p->szModuleName))

je nachdem, was ausgesagt werden soll...
superracer
Board-User Level 3
Board-User Level 3
 
Beiträge: 1073
Registriert: So 04 Jul, 2004 11:18

Beitragvon radditz » Mi 22 Mär, 2006 15:48

if (p != null && p->szModuleName != null)
{
if (!strcmp(szWndText, p->szModuleName) {
return false;
}
}

p != null
prüft, ob du einen gültigen Pointer hast

p->szModuleName != null
prüft, ob szModuleName ein gültiger Pointer ist
(wichtig ist die Reihenfolge!)
Telematica DSL Solo Pro 30 Mbit/s
Vorher: A1 VDSL 16 Mbit/s
radditz
Ultimate Power-User
Ultimate Power-User
 
Beiträge: 4399
Registriert: Mo 23 Jun, 2003 16:50

Beitragvon michaelw » So 26 Mär, 2006 00:37

Leider scheint das alles auch nicht zu helfen und steigt ebenfalls mit der Fehlermeldung "Debug Assertion Failed!" und dem Text "list iterator not dereferencable" aus, die auf folgende Codeteil im list-Datei hinweist:
#if _HAS_ITERATOR_DEBUGGING
if (this->_Mycont == 0
|| _Ptr == ((_Myt *)this->_Mycont)->_Myhead)
{
_DEBUG_ERROR("list iterator not dereferencable");
_SCL_SECURE_TRAITS_OUT_OF_RANGE;
}


Gibt es sonst noch Möglichkeiten zum Pointer überprüfen oder soll ich dieses Problem drinnen lassen und einfach dieses _HAS_ITERATOR_DEBUGGING abschalten?
michaelw
Senior Board-Mitglied
Senior Board-Mitglied
 
Beiträge: 400
Registriert: So 24 Okt, 2004 04:48

Beitragvon michaelw » Mo 27 Mär, 2006 20:20

Shit, wieso kann man nicht den ganzen Beitrag löschen!
michaelw
Senior Board-Mitglied
Senior Board-Mitglied
 
Beiträge: 400
Registriert: So 24 Okt, 2004 04:48

Beitragvon max_payne » Mo 27 Mär, 2006 21:34

Shit, wieso kann man nicht den ganzen Beitrag löschen!

damit die nachwelt auch noch über dich und deine probleme rätseln oder lachen kann!
max_payne
Ultimate Power-User
Ultimate Power-User
 
Beiträge: 4982
Registriert: Mo 30 Aug, 2004 12:25


Zurück zu PROGRAMMIER FORUM

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 20 Gäste