Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: Nullpointer ???

  1. #11
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Beitrag


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    Zitat Zitat von Onkel Dago
    Dient er vielleicht "nur" als Dummy bei der Programmerstellung? Ich rufe z.Bsp. eine Funktion auf welche einen Pointer als Parameter benötigt.
    Auch das kann man nicht pauschal beantworten, ohne die Interna der aufgerufenen Prozedur/Funktion zu kennen. Das kann man unabhängig von der verwendeten Sprache so behaupten (egal ob SCL, C, C++, Pascal etc.).
    Die eine Prozedur/Funktion prüft richtigerweise, ob ein Zeiger ins Nirwana zeigt und wird da ganz locker drüber wegspringen. Eine andere Prozedur/Funktion prüft das nicht und bringt Dein OS durch den NIL Pointer zum Absturz.
    Grundsätzlich gilt : Eine Funktion/Prozedur kann einen NIL-Pointer akzeptieren und den entsprechend behandeln, eine Garantie dafür gibt es aber nicht...

    Zitat Zitat von Onkel Dago
    "NIL" drann (um den Baustein übersetzen speichern zu können).
    Das wird jeder Compiler beim Übersetzen erstmal ohne zu maulen akzeptieren (sieht der Compiler erstmal als gültigen Wert an) , aber zur Laufzeit kriegst Du die Fehlermeldungen um die Ohren gehauen

    Gruß

    Question_mark
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren Der Zeiger ins Nirwana  

  2. #12
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Blinzeln

    Hallo,

    Zitat Zitat von argv_user
    NIL wird normalerweise benutzt, um einen undefinierten
    Wert zu signalisieren. Dass NIL bei SCL dasselbe wie NULL
    ist, da kann Prof.N.Wirth nix für.
    Der Wert ist nicht undefiniert, sondern NULL (oder meinetwegen auch NIL). Die Definition des Wertes NULL ist also gewährleistet. Prof. Wirth ist zwar der Schöpfer der Programmiersprache Pascal (einfach genial), aber sein Einfluss auf SCL ist eben begrenzt, weil Siemens nur einen kleinen, rudimentären Vorrat der Möglichkeiten von Pascal in SCL implementiert hat.

    Zitat Zitat von argv_user
    In C werden ja alle Variablen mit 0 initialisiert, auch die Pointer.
    In Pascal (SCL ist Pascal?!) ist dem nicht so. Hier musst Du das selber erledigen.
    Einfach Quatsch, da hab ich doch wohl 25 Jahre etwas falsch gemacht ...

    Zitat Zitat von argv_user
    Überdies nennen sich Pointer hier Zeiger.
    Ist C englisch und Pascal Deutsch ???

    Zitat Zitat von argv_user
    Gängig ist, wenn der Zeiger frisch ist, diesem den Wert NIL zuzuweisen.
    So kann man ihn softwaretechnisch von einem benutzten
    Zeiger unterscheiden...
    Mich würde jetzt mal die Definition von einem "frischen Zeiger" interessieren...
    Wenn Du mit GetMem einen Zeiger auf einen Speicherbereich anforderst, kriegst Du einen "frischen Zeiger" (solange die Ressourcen des OS reichen). Wenn Du den Speicher mit FreeMem wieder freigibst, kann der Zeiger noch irgendwo auf einen Speicherbereich zeigen (also ganz schön frisch sein), der Zugriff auf den Speicherbereich mit dem Zeiger wird Dein OS aber ins Nirwana schicken..
    Im Gegensatz zu C kennt man in Pascal auch die Funktion "xx.FREEANDNIL", die tatsächlich nach der Freigabe eines Zeigers oder Objektes den Speicherbereich freigibt und den Zeiger wirklich auf NULL (oder NIL, wo ist da für Dich der Unterschied ???) setzt.

    Gruß

    Question_mark
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren Auf dem Weg ins Nirwana  

  3. #13
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Blinzeln

    Hallo,

    Zitat Zitat von argv_user
    Gängig ist, wenn der Zeiger frisch ist, diesem den Wert NIL zuzuweisen.
    So kann man ihn softwaretechnisch von einem benutzten
    Zeiger unterscheiden...
    Ähemm, habe mir das gerade noch mal durchgelesen und bin zu der Erkenntnis gekommen : So einen Blödsinn habe ich noch nirgendwo gelesen. Ich weiss zwar was Du ausdrücken willst, aber Du hast noch einen Versuch .

    Gruß

    Question_mark
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren Pointer  

  4. #14
    Registriert seit
    24.05.2006
    Beiträge
    234
    Danke
    14
    Erhielt 77 Danke für 57 Beiträge

    Standard

    Nachdem bisher keiner die ursprüngliche Frage beantwortet hat:
    Der FILL füllt den Bereich nicht, sondern liefert den Fehler 0x8124 (Bereichsfehler beim Lesen eines Parameters) - zumindest bei einer 318er CPU.


    Ursache liegt darin, dass der nil-Pointer nur im ersten seiner zehn Bytes etwas von 0 Verschiedenes enthält - nämlich die 0x10 als Kennung für einen Anypointer. Alles andere, Typ, Anzahl, DB-Nummer, Bereichszeiger sind komplett mit 0 belegt.

  5. Folgender Benutzer sagt Danke zu hovonlo für den nützlichen Beitrag:

    Onkel Dagobert (28.05.2008)

  6. #15
    Registriert seit
    28.10.2005
    Ort
    Ottweiler, Saar
    Beiträge
    940
    Danke
    259
    Erhielt 124 Danke für 109 Beiträge

    Standard

    Zitat Zitat von hovonlo Beitrag anzeigen
    Nachdem bisher keiner die ursprüngliche Frage beantwortet hat:
    Der FILL füllt den Bereich nicht, sondern liefert den Fehler 0x8124 (Bereichsfehler beim Lesen eines Parameters) - zumindest bei einer 318er CPU.


    Ursache liegt darin, dass der nil-Pointer nur im ersten seiner zehn Bytes etwas von 0 Verschiedenes enthält - nämlich die 0x10 als Kennung für einen Anypointer. Alles andere, Typ, Anzahl, DB-Nummer, Bereichszeiger sind komplett mit 0 belegt.
    Das ist doch gerade der SINN des NIL-Pointers.
    Der ist nämlich als der ungültigste Pointer überhaupt definiert.
    Die einzigen erlaubten Operationen sind die Zuweisung
    und die Abfrage auf gleich oder ungleich...
    Geändert von argv_user (28.05.2008 um 18:16 Uhr)

  7. #16
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Ausrufezeichen


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    beim SFC21 sind "BVAL" (Input) und "BLK" (Output) Übergabeparameter als Zeiger auf einen Datenbereich. Ihr müsst schon selber dafür sorgen, diese Any-Pointer mit den Adressen des Speicherbereiches zu versorgen. Wie das geht wurde hier schon unzählige Male im Forum mit dem SFC20 BLKMOV als Beispiel beschrieben. Das will ich hier nicht wiederholen.
    Also Ihr müsst schon die Any-Pointer mit den Adressen versorgen, sonst geht das doch nicht !

    Gruß

    Question_mark
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren Sfc 21  

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •