NullPointerDereferenceException, brauche Hilfe



  • Hi also mein Programm läuft irgendwie nicht.Bekomm den Fehler:
    NullPointerDereferenceException aborted in Zeile 74
    Könnte mir einer sagen warum das so ist und vielleicht mein Programm umändern damit es läuft?Will damit die Hausnummer der beiden Hauser an der Kreuzung ausgeben.

    1: prog aufgabe1
    2:
    3: struct Haus_TypA
    4: { int hausnummer;
    5: int anz_fenster;
    6: int anz_tueren;
    7: int anz_wohnungen;
    8: }
    9:
    10: class Haus_TypB
    11: { int hausnummer;
    12: int anz_fenster;
    13: int anz_tueren;
    14: int anz_wohnungen;
    15: Haus_TypB nachbar;
    16: }
    17:
    18: class strasse_TypA
    19: { int anz_haeuser;
    20: Haus_TypA haeuserkette;
    21: }
    22:
    23: class strasse_TypB
    24: { int anz_haeuser;
    25: Haus_TypB haeuserkette;
    26: }
    27:
    28: strasse_TypA hauptstrasse;
    29: strasse_TypB mittelweg;
    30:
    31: Haus_TypA neues_Haus_bauen_TypA(int i)
    1
    32: { Haus_TypA villa;
    33: villa.hausnummer = i;
    34: villa.anz_fenster = 10;
    35: villa.anz_tueren = 3;
    36: villa.anz_wohnungen = 2;
    37: return villa;
    38: }
    39:
    40: Haus_TypB neues_Haus_bauen_TypB(int i)
    41: { Haus_TypB mehrfamilienhaus;
    42: mehrfamilienhaus = new Haus_TypB ();
    43: mehrfamilienhaus.hausnummer = i;
    44: mehrfamilienhaus.anz_fenster = 30;
    45: mehrfamilienhaus.anz_tueren = 3;
    46: mehrfamilienhaus.anz_wohnungen = 7;
    47: return mehrfamilienhaus;
    48: }
    49:
    50: { int zaehler;
    51:
    52: // Haeuser in der Hauptsrasse anlegen
    53: zaehler=10;
    54: while (zaehler > 0)
    55: {
    56: hauptstrasse = new strasse_TypA();
    57: hauptstrasse.haeuserkette = neues_Haus_bauen_TypA(zaehler);
    58: zaehler = zaehler - 1;
    59: }
    60:
    61: // Haeuser im Mittelweg anlegen
    62: zaehler=8;
    63: mittelweg = new strasse_TypB();
    64: while (zaehler > 0)
    65: {
    66: mittelweg.haeuserkette = neues_Haus_bauen_TypB(zaehler);
    67: zaehler = zaehler - 1;
    68: }
    69:
    70: // Kreuzung zwischen der Hauptstrasse und dem Mittelweg
    71: // Eckhaus = 2. Haus in der Hauptsrasse und
    72: // 4. Haus im Mittelweg
    73: print (hauptstrasse.haeuserkette.hausnummer);
    74: print (mittelweg.haeuserkette.nachbar.nachbar.nachbar.hausnummer);
    75: }
    


  • die 1 zwischen Zeile 31 und 32 muss im übrigen weg 😉



  • Falsches Forum.
    Benutze einen Debugger.
    Gebe alle Elemente einzeln aus. In etwa so:

    printf("%p\n", &mittelweg);
    printf("%p\n", &mittelweg.haeuserkette);
    printf("%p\n", &mittelweg.haeuserkette.nachbar);
    ...
    printf("%p\n", &mittelweg.haeuserkette.nachbar.nachbar.nachbar.hausnummer);
    

    Dann siehst du auch welches Element 0 ist und dann kannst du nachsehen wieso es 0 ist.



  • Da dies nicht c ist sondern c4(vorstufe von c) kann ich noch keinen debugger nutzen.wenn ich alles einzeln ausgebe, kriege ich bei jeder stufe immer 1 heraus außer bei der Zeile komplett(mittelweg.haeuserkette.nachbar.nachbar.nachbar.hausnummer)kommt der Fehler. Jemand anders eine Idee wie es läuft?



  • Hallo,

    ist eigentlich ziemlich klar, wenn ich's richtig gesehen habe. Ein Haus_TypB hat einen Nachbarn:

    10: class Haus_TypB
    11: { int hausnummer;
    12: int anz_fenster;
    13: int anz_tueren;
    14: int anz_wohnungen;
    15: Haus_TypB nachbar;  //<---- hier ist ein Nachbar!!
    16: }
    

    Und wenn du ein neues Haus_TypB baust:

    40: Haus_TypB neues_Haus_bauen_TypB(int i)
    41: { Haus_TypB mehrfamilienhaus;
    42: mehrfamilienhaus = new Haus_TypB ();
    43: mehrfamilienhaus.hausnummer = i;
    44: mehrfamilienhaus.anz_fenster = 30;
    45: mehrfamilienhaus.anz_tueren = 3;
    46: mehrfamilienhaus.anz_wohnungen = 7;
    47: return mehrfamilienhaus;
    48: }
    

    ignorierst du die Nachbarn 🙂

    MfG,

    Probe-Nutzer



  • Danke, und wie schrieb ich es jetzt um damit es wieder funktioniert?


Anmelden zum Antworten