Prüfen ob ArrayInhalt 0 ist



  • Hallo!

    Ich habe folgendes:

    MyType array[8];
    memset(array, 0, 8);
    

    Damit habe ich ein Array vom Typ MyType was in jedem Feld 0 enthält.
    Nur wie kann ich das hinterher prüfen?

    if(array[3] != 0)
    

    Geht nicht



  • Was genau ist denn MyType? Wenn sich dahinter eine eigenständige Klasse verbirgt, hast du durch deine memset()-Spielerei vermutlich ungültige Objekte erzeugt. Andernfalls hast du nur die ersten 8 BYTE des Arrays auf 0 gesetzt (und außer char's sind eigentlich alle Datentypen größer als 1 Byte).



  • Man kann int und MyType ohne op== wohl nicht vergleichen...

    Ich weiss auch nicht ob Du wirklich die ersten acht Bytes der Tabelle von Deinen MyTypes mit 0 überschreiben möchtest, der Konstruktor von MyType sollte sehr gut selbst in der Lage sein sich zu initialisieren. Du änderst damit von aussen den Zustand Deiner Objekte.


  • Mod

    wenn MyType kein POD ist, dann ist die verwendung von memset undefiniertes verhalten. andernfalls tut es schlicht nicht das richtige, es sei denn MyType hat die größe 1. wenn MyType kein POD ist, so ist es ohnehin nicht notwendig, die elemnte explizit zu initialisieren - der default-ctor jedes elements wird implizit aufgerufen werden. andernfalls bietet sich die verwendung eines array-initialisierers an (der im übrigen so auch bei nicht-PODs benutzt werden kann - man muß sich also nicht darum kümmern):

    MyType array[8]={};
    

    ansonsten siehe vorherige beiträge - MyType benötigt einen eigenen operator!= oder eine implizite konvertierung in einen typ, der mit int verglichen werden kann.



  • Öhm23 schrieb:

    Damit habe ich ein Array vom Typ MyType was in jedem Feld 0 enthält.
    Nur wie kann ich das hinterher prüfen?

    Wieso willst du das? memset arbeitet _immer_ korrekt. Wenn nicht, dann kannst du von defekter Hardware ausgehen. Und dann ist Hopfen und Malz sowieso verloren.
    Oder geht es dir nur darum, generell die Elemente eines Arrays mit einem Wert zu vergleichen? Ansonsten können wir nur raten, da niemand weiss, was genau dein MyType ist. memset arbeitet bytebasierend, du willst das Array mit einem int vergleichen und dein eigentlicher Typ ist MyType. Passt irgendwie alles nicht so richtig zusammen...



  • groovemaster schrieb:

    Öhm23 schrieb:

    Damit habe ich ein Array vom Typ MyType was in jedem Feld 0 enthält.
    Nur wie kann ich das hinterher prüfen?

    Wieso willst du das? memset arbeitet _immer_ korrekt.

    Wie man's nimmt 😉 memset() setzt stumpf die Speicherbytes auf den übergebenen Wert - und wie schon mehrfach erklärt wurde, ergibt ein Füllen mit 0-Werten nicht unbedingt ein gültiges Objekt.



  • Ich sprach aber nicht von logischen Fehlern. 😉 memset setzt einen Bereich von Bytes auf einen bestimmten Wert, und das erfolgt _immer_ fehlerfrei. Was der Bereich dann letztendlich repräsentiert, spielt dabei erstmal keine Rolle.


Anmelden zum Antworten