tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
426
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von lolilol
    lolilol lolilol ist offline Mitglied Silber
    Registriert seit
    May 2004
    Ort
    Freiburg i. Brsg.
    Beiträge
    52
    Hallo,

    ich sitze gerade an einer Aufgabe für die Uni. Es ist ein kleines (auto, schiff, etc.)-Quartett Spiel mit einem Server und x-clienten.

    Ich teste mit derezeit 2 Clienten.

    Derzeit stürzt einer oder beide der Clienten jedoch immer ab. Das seltsame dabei ist jedoch, dass sich weder fest machen läst welches das Clientprogramme das ist (also egal, mit welchem ich mich zu erst zum server verbinde und welcher dadurch zuerst die daten bekommt).

    Auch ist der Moment des Abruchs immer unterschiedlich. Er zirkuliert zwar um einen bestimmten Bereich der Kommunikation, ist aber nicht genau festzumachen.

    Eine Fehlermeldung bekomme ich nicht.

    Hat einer eine Idee, woran das liegen könnte? Windows Speicher Restriktionen oder so (auch wenn dass mir unwahrscheinlich erscheint)? Oder irgendwas anderes?


    Eine weitere Frage am Rande: gibt es eine Möglichkeit aus einer union auszulesen, welche der variablen besetzt ist?

    Vielen Dank,
    loli

    PS: Arbeite gerade unter WinXP Prof mit Dev-C++ und es ist ein Konsolenprogramm.

    PPS: Falls jemand trotz der Zufälligkeit meint das Problem könnte im Code liegen: http://www.theinsanewonderland.com/loli/quartett/
    -edit- mir fällt gerade auf, dass Doxygen den Quelltext nicht zur verfügung stellt: sollte er gewünscht sein, einfach nachfragen -/edit-
    Geändert von lolilol (06.12.06 um 02:25 Uhr)
     
    /!\ Beware of lolis /!\

  2. #2
    Avatar von jokey2
    jokey2 jokey2 ist offline Mitglied Smaragd
    Registriert seit
    Nov 2004
    Beiträge
    1.235
    Zu Deinem Absturzproblem kann ich zwar jetzt nichts sagen, aber die Frage mit der Union kann ich dir beantworten.
    Die Antwort lautet: alle
    Alle Teile eines Union greifen auf den gleichen Speicherbereich zu. Daher kannst du ja in den Einen schreiben und aus dem Anderen lesen.
    Beispiel:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
    union MyUnion {
      struct t_date {
        char[2] Tag;
        char[2] Monat;
        char[4] Jahr;
      } Datum;
      char[8] DatumText;
    } DateUnion;
    Man kann also mit
    Code :
    1
    
    strncpy(DateUnion.DatumText, "24122006", 8);
    ein Datum als Text eintragen und die einzelnen Komponenten z.B. mit
    Code :
    1
    2
    
    char[2] Tag;
    strncpy(Tag, DateUnion.Datum.Tag, 2);
    auslesen. Die Anfangsadressen der Member 'Date.Tag' und 'DateText' sind gleich, d.h. es gibt in dieser Union nur einen Speicherbereich von 8 chars, der sowohl von Tag-Monat-Jahr als auch von DateText genutzt wird.
     

  3. #3
    Avatar von lolilol
    lolilol lolilol ist offline Mitglied Silber
    Registriert seit
    May 2004
    Ort
    Freiburg i. Brsg.
    Beiträge
    52
    Hallo,

    danke für die Antwort, das Problem liegt jedoch anderweitig.

    Ich hab z.B. folgende union:
    Code :
    1
    2
    3
    4
    
    union union_u {
      char[16] text;
      long int integerNumber;
    } union_t;

    Jetzt sende ich diese über das Netzwerk - hop - und empfange sie auf der anderen Seite.
    Hier will ich dem Benutzer den Inhalt ausgeben: Nur wie?

    Wenn ich
    Code :
    1
    
    printf("%s", union_t.text);
    verwende kommt im Textfalle etwas sinvolles heraus, bei einer gespeicherten Zahl nur sinnloser Zeichensalat.

    Ebenso nur andersherum bei
    Code :
    1
    
    printf("%li", union_t.integerNumber);

    Idee?

    Gruß,
    Oskar
     
    /!\ Beware of lolis /!\

  4. #4
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Das Problem ist, dass du natürlich auf der anderen Seite wissen mußt was in der union jetzt "drin steckt". Das mußt du dir einfach extra merken.

    Bsp:
    Code c:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    struct {
      enum { num, text } type;
      union {
        char text[16];
        long int num;
      } value;
    } numtext;
     
    int main() {
      numtext.type = num;
      numtext.value.num = 1111;
     
      switch (numtext.type) {
      case num:
        printf("%ld\n", numtext.value.num);
        break;
      case text:
        printf("%s\n", numtext.value.text);
      };
     
      return 0;
    }
    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  5. #5
    Avatar von jokey2
    jokey2 jokey2 ist offline Mitglied Smaragd
    Registriert seit
    Nov 2004
    Beiträge
    1.235
    Es tut mir ja leid, Dich enttäuschen zu müssen, aber so wird das auch nicht gehen. Dafür ist die 'union' nicht gemacht.
    Wenn Du Daten unterschiedlicher Art über das Netzwerk versendest, mußt du dem Empfänger mitteilen, welcher Art die Daten sind. Du sendest also zuerst eine Datentypbeschreibung (z.B. ein Byte mit einem bestimmten Wert, der einen Typ bezeichnet), dann kommt normalerweise noch die Länge des Datenblockes und danach sendest Du den Puffer mit den Daten.
    Der Empfänger liest also alles ein und entscheidet anhand der Typbeschreibung, wie mit den empfangenen Daten umzugehen ist.
    Wenn Du unbedingt die union verschicken willst (was ich so nicht tun würde), dann achte darauf, daß Deine union immer 16 Byte lang ist, also so groß wie das Größte seiner Elemente.
     

Ähnliche Themen

  1. Programm stürzt ab
    Von Blaze241 im Forum Java
    Antworten: 4
    Letzter Beitrag: 02.07.09, 15:14
  2. Antworten: 7
    Letzter Beitrag: 18.01.09, 15:55
  3. Antworten: 2
    Letzter Beitrag: 31.05.06, 16:43
  4. Dialog Stürzt ohne Fehlermeldung ab
    Von Zhoragh im Forum Java
    Antworten: 2
    Letzter Beitrag: 28.08.05, 16:28
  5. Pc Stürzt Komplett Ab ! Ohne Neutart ! Ohne Bluescreen !
    Von SammyGray im Forum Microsoft Windows
    Antworten: 9
    Letzter Beitrag: 04.11.03, 11:45