Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Swoerm

Alter Hase

  • »Swoerm« ist der Autor dieses Themas

Beiträge: 451

Wohnort: 127.0.0.1

  • Private Nachricht senden

1

03.04.2013, 23:59

Problem mit Ein- Ausgabe im Netzwerk

Ich versuche zurzeit ein Programm zu programmieren was auf meinem PC ein Dokument erstellt und dort eine Zahl speichert.
Dann soll mein Laptop übers Netzwerk darauf zugreifen und die Zahl ausgeben.
Zunächst funktionierte alles. :D
Dann dachte ich mir ich könnte n Chat draus machen also habe ich n bisschen was umstrukturiert.
Nun öffnet sich das Programm zeigt die Zahl an doch dann sagt Visual Studio:

Unbehandelte Ausnahme bei 0x76ed15de in Netztwerk.exe: 0xC00000FD: Stack overflow.

Wenn ich auf Unterbrechen klicke öffnet sich ein Fenster neben meinem Quellcode in dem steht:

Keine Quelle verfügbar

Aufruflistenort:

ntdll.dll!76ed15de()

Hier ist der Quellcode vom Programm auf meinem Laptop:


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <fstream>
using namespace std;

int Text = 0;
int Text2 = 0;

void Output ();

int main ()
{

   Output ();   

    
getchar ();
return 0;
}

void Output ()
    {
    while (true)
    {
    ifstream Input ("//ASUS-P5D-PRO-PC/Documents/Visual Studio 2010/Projects/Netztwerk/Netztwerk/Saves/Test.bin" , ios::binary);
    Input.read ((char*) &Text, sizeof(Text));

    Input.close ();

    if( Text != Text2 )
    {
    cout << Text << endl;
    Text2 = Text; 
    Output ();
    }
    else if ( Text == Text2 )
        Output ();
    }
    }

C-/C++-Quelltext

1
2
    /* Keep the compiler happy */
    return(0);

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

2

04.04.2013, 01:19

Den Fehler bekommst du, da du eine endlose Rekursion erzeugst.
Abgesehen davon, dass es nicht besonders schön ist, was du da machst char-Zeiger aus Integern, deren Namen äußerst irreführend sind, verschließt sich mir der Sinn von Output(). Falls Text ungleich Text2 ist, gibst du irgendwas aus und rufst Output auf, wenn sie gleich sind rufst du Output auch auf (eine 3. Möglichkeit gibt es nicht). Merkst du, wo das hinführt (von der Endlosschleife ganz zu schweigen...)? Sorry, aber da hast du ein übles Konstrukt gebaut. :pinch:
Merke: Rekursionen sollten nur dort eingesetzt werden, wo sie Probleme leichter als Schleifen lösen können. Außerdem müssen Abbruchbedingungen festgelegt werden.

Swoerm

Alter Hase

  • »Swoerm« ist der Autor dieses Themas

Beiträge: 451

Wohnort: 127.0.0.1

  • Private Nachricht senden

3

04.04.2013, 16:01

Erstmal danke! :)
Da du das Programm von meinem PC nicht kennst ist es verständlich das sich dir der Sinn verschließt.
Ich werde ein wenig weiter dran basteln und hoffen das ich den Fehler beheben kann.

C-/C++-Quelltext

1
2
    /* Keep the compiler happy */
    return(0);

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

4

04.04.2013, 16:28

Erstmal danke! :)
Da du das Programm von meinem PC nicht kennst ist es verständlich das sich dir der Sinn verschließt.


Das hat nichts damit zu tun, dass ich irgendein Programm nicht kenne. Du hast vermutlich vor, dass dein Programm jedes Mal den Inhalt der Datei ausgibt, falls sie auf dem anderen Computer geändert wurde? Dies ist erstens eine schlechte Idee, da du die Datei andauernd öffnen und schließen müsstest und zweitens, bevor du bastelst, musst du unbedingt verstehen, warum dein Programm so niemals funktionieren kann (bezüglich Schleifen und Rekursion). Die Architektur deines Programms ist fundamental falsch. Ich bezweifle, dass sich ein Chat einigermaßen performant über das ständige Einlesen von Dateien bauen lässt.

Ein weiterer Punkt: es ist sinnvoll, zu überprüfen, ob die Datei überhaupt gültige Zahlen enthält. Ferner kannst du aus dem else if-Zwei einfach else machen, da es - wie gesagt - keine dritte Bedingung gibt.

Werbeanzeige