| Autor |
Nachricht |
Robert1996
Mitglied
Benutzerprofil
Anmeldungsdatum: 21.07.2011
Beiträge: 86
|
Robert1996 Mitglied
19:02:53 30.01.2012 Titel: |
StreamWriter-Klasse |
Zitieren |
Guten Abend.
Ich habe mir überlegt, die StreamWriter-Klasse aus C# und VB.Net in C++ "nachzuprogrammieren", mit den Mitteln und Kenntnissen, die mir zur Verfügung stehen. Wenn ich das Projekt compiliere, wird auch die Konsole geöffnet, jedoch kommt dann eine Meldung von VC++ 2010 EE, dass es einen Schreibfehler an Addresse 0x000 usw. gab. Hier erstmal der Code:
| C/C++ Code: | 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 39 40 41 42 43 44 45 46 47 | 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 39 40 41 42 43 44 45 46 47 | #include <Windows.h>
#include <iostream>
struct StreamWriter
{
private:
char name[200];
::FILE *file;
public:
void Name (::TCHAR fname[200])
{
name[200] = fname[200];
strcat (name, ".txt");
file = fopen (name, "w");
}
void WriteLine (::TCHAR wl[500])
{
char WriteLine[500] = {wl[500]};
strcat (wl, "\n");
fputs (wl, file);
}
void Write (char w[500])
{
char WriteLine[500] = {w[500]};
fputs (w, file);
}
void Close ()
{
fclose (file);
}
};
int main ()
{
StreamWriter sw;
sw.Name ("Name");
sw.WriteLine ("Zeile1");
sw.Write ("Zeile2");
sw.Close ();
system ("PAUSE");
return 0;
}
| |
| C/C++ Code: | 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 39 40 41 42 43 44 45 46 47 | #include <Windows.h>
#include <iostream>
struct StreamWriter
{
private:
char name[200];
::FILE *file;
public:
void Name (::TCHAR fname[200])
{
name[200] = fname[200];
strcat (name, ".txt");
file = fopen (name, "w");
}
void WriteLine (::TCHAR wl[500])
{
char WriteLine[500] = {wl[500]};
strcat (wl, "\n");
fputs (wl, file);
}
void Write (char w[500])
{
char WriteLine[500] = {w[500]};
fputs (w, file);
}
void Close ()
{
fclose (file);
}
};
int main ()
{
StreamWriter sw;
sw.Name ("Name");
sw.WriteLine ("Zeile1");
sw.Write ("Zeile2");
sw.Close ();
system ("PAUSE");
return 0;
}
| |
| C/C++ Code: | 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 39 40 41 42 43 44 45 46 47 | #include <Windows.h>
#include <iostream>
struct StreamWriter
{
private:
char name[200];
::FILE *file;
public:
void Name (::TCHAR fname[200])
{
name[200] = fname[200];
strcat (name, ".txt");
file = fopen (name, "w");
}
void WriteLine (::TCHAR wl[500])
{
char WriteLine[500] = {wl[500]};
strcat (wl, "\n");
fputs (wl, file);
}
void Write (char w[500])
{
char WriteLine[500] = {w[500]};
fputs (w, file);
}
void Close ()
{
fclose (file);
}
};
int main ()
{
StreamWriter sw;
sw.Name ("Name");
sw.WriteLine ("Zeile1");
sw.Write ("Zeile2");
sw.Close ();
system ("PAUSE");
return 0;
}
| |
Wie kann man das Problem beheben?
Liegt es evtl. an den verwendeten Dateitypen?
Vielen Dank schonmal im Voraus. . . |
|
|
|
 |
dot
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.05.2004
Beiträge: 3858
|
dot Mitglied
19:06:53 30.01.2012 Titel: |
|
Zitieren |
Schonmal mit Debuggen versucht? |
_________________ one point of view will never reveal the entire scene.
Zuletzt bearbeitet von dot am 19:07:06 30.01.2012, insgesamt 1-mal bearbeitet |
|
 |
Robert1996
Mitglied
Benutzerprofil
Anmeldungsdatum: 21.07.2011
Beiträge: 86
|
Robert1996 Mitglied
19:16:52 30.01.2012 Titel: |
|
Zitieren |
| dot schrieb: | | Schonmal mit Debuggen versucht? |
Macht das denn nicht der Compiler beim erstellen sowieso? |
|
|
|
 |
dot
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.05.2004
Beiträge: 3858
|
dot Mitglied
19:23:07 30.01.2012 Titel: |
|
Zitieren |
lol, ich glaub du hast noch nicht ganz verstanden was Debuggen ist. Empfehle schwer dass du dich mal damit beschäftigst |
_________________ one point of view will never reveal the entire scene.
Zuletzt bearbeitet von dot am 19:23:38 30.01.2012, insgesamt 1-mal bearbeitet |
|
 |
Robert1996
Mitglied
Benutzerprofil
Anmeldungsdatum: 21.07.2011
Beiträge: 86
|
Robert1996 Mitglied
19:25:17 30.01.2012 Titel: |
|
Zitieren |
Was ist denn debuggen anderes als die Fehlermeldungen vom Compiler zu verstehen und zu verbessern? |
|
|
|
 |
dot
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.05.2004
Beiträge: 3858
|
dot Mitglied
19:29:47 30.01.2012 Titel: |
|
Zitieren |
Compilerfehler ausbessern hat mit Debugging nichts zu tun. |
_________________ one point of view will never reveal the entire scene.
Zuletzt bearbeitet von dot am 19:30:44 30.01.2012, insgesamt 1-mal bearbeitet |
|
 |
Robert1996
Mitglied
Benutzerprofil
Anmeldungsdatum: 21.07.2011
Beiträge: 86
|
Robert1996 Mitglied
19:48:12 30.01.2012 Titel: |
|
Zitieren |
Ja, schön und gut, aber weil ich das jetzt weiß, geht mein Programm ja trotzdem noch nicht. Kannst du mir erklären wo der Fehler liegen könnte und das evtl. mal bei dir ausprobieren? |
|
|
|
 |
dot
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.05.2004
Beiträge: 3858
|
dot Mitglied
19:50:31 30.01.2012 Titel: |
|
Zitieren |
| 3P!CF41L schrieb: | | Ja, schön und gut, aber weil ich das jetzt weiß, geht mein Programm ja trotzdem noch nicht. |
Aber weil du das jetzt weißt, weißt du wie du dem Problem auf die Spur kommen kannst... |
_________________ one point of view will never reveal the entire scene.
|
|
 |
Robert1996
Mitglied
Benutzerprofil
Anmeldungsdatum: 21.07.2011
Beiträge: 86
|
Robert1996 Mitglied
20:31:00 30.01.2012 Titel: |
|
Zitieren |
Also ich habe mir jetzt das OllyDebug-Programm runtergeladen und ausgeführt. Dann mit dem Tool mein Programm gestartet und jetzt bin ich erst recht verwirrt! Er zeigt mir jetzt scheinbar unendlich viele RAM Adressen an, aber was fange ich jetzt damit an? |
|
|
|
 |
dot
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.05.2004
Beiträge: 3858
|
dot Mitglied
20:33:02 30.01.2012 Titel: |
|
Zitieren |
Visual Studio hat einen eingebauten Debugger. Lern den zu benutzen. |
_________________ one point of view will never reveal the entire scene.
Zuletzt bearbeitet von dot am 20:33:26 30.01.2012, insgesamt 1-mal bearbeitet |
|
 |
Robert1996
Mitglied
Benutzerprofil
Anmeldungsdatum: 21.07.2011
Beiträge: 86
|
Robert1996 Mitglied
20:35:43 30.01.2012 Titel: |
|
Zitieren |
Sorry aber das hilft mir auch nicht. Wie soll ich den denn benutzen? Außerdem habe ich das Gefühl, dass du ganz genau weißt was nicht stimmt |
|
|
|
 |
Robert1996
Mitglied
Benutzerprofil
Anmeldungsdatum: 21.07.2011
Beiträge: 86
|
Robert1996 Mitglied
20:37:38 30.01.2012 Titel: |
|
Zitieren |
So, das sagt VC++ beim Compilieren:
| Code: | "StreamWriter.exe": "G:\Projekte\C++\StreamWriter\Debug\StreamWriter.exe" geladen, Symbole wurden geladen.
"StreamWriter.exe": "C:\Windows\SysWOW64\ntdll.dll" geladen, Cannot find or open the PDB file
"StreamWriter.exe": "C:\Windows\SysWOW64\kernel32.dll" geladen, Cannot find or open the PDB file
"StreamWriter.exe": "C:\Windows\SysWOW64\KernelBase.dll" geladen, Cannot find or open the PDB file
"StreamWriter.exe": "C:\Windows\SysWOW64\msvcr100d.dll" geladen, Symbole wurden geladen.
Eine Ausnahme (erste Chance) bei 0x57b5d337 (msvcr100d.dll) in StreamWriter.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x013f5846.
Unbehandelte Ausnahme bei 0x57b5d337 (msvcr100d.dll) in StreamWriter.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x013f5846.
| |
| Code: | "StreamWriter.exe": "G:\Projekte\C++\StreamWriter\Debug\StreamWriter.exe" geladen, Symbole wurden geladen.
"StreamWriter.exe": "C:\Windows\SysWOW64\ntdll.dll" geladen, Cannot find or open the PDB file
"StreamWriter.exe": "C:\Windows\SysWOW64\kernel32.dll" geladen, Cannot find or open the PDB file
"StreamWriter.exe": "C:\Windows\SysWOW64\KernelBase.dll" geladen, Cannot find or open the PDB file
"StreamWriter.exe": "C:\Windows\SysWOW64\msvcr100d.dll" geladen, Symbole wurden geladen.
Eine Ausnahme (erste Chance) bei 0x57b5d337 (msvcr100d.dll) in StreamWriter.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x013f5846.
Unbehandelte Ausnahme bei 0x57b5d337 (msvcr100d.dll) in StreamWriter.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x013f5846.
| |
| Code: | "StreamWriter.exe": "G:\Projekte\C++\StreamWriter\Debug\StreamWriter.exe" geladen, Symbole wurden geladen.
"StreamWriter.exe": "C:\Windows\SysWOW64\ntdll.dll" geladen, Cannot find or open the PDB file
"StreamWriter.exe": "C:\Windows\SysWOW64\kernel32.dll" geladen, Cannot find or open the PDB file
"StreamWriter.exe": "C:\Windows\SysWOW64\KernelBase.dll" geladen, Cannot find or open the PDB file
"StreamWriter.exe": "C:\Windows\SysWOW64\msvcr100d.dll" geladen, Symbole wurden geladen.
Eine Ausnahme (erste Chance) bei 0x57b5d337 (msvcr100d.dll) in StreamWriter.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x013f5846.
Unbehandelte Ausnahme bei 0x57b5d337 (msvcr100d.dll) in StreamWriter.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x013f5846.
| |
Und gleichzeitig ploppt ein Fenster auf, in dem genau das nochmal steht... |
|
|
|
 |
dot
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.05.2004
Beiträge: 3858
|
dot Mitglied
20:39:39 30.01.2012 Titel: |
|
Zitieren |
Und wenn es stehen bleibt findest du dich im Debugger und kannst alles mögliche tun. Lern den Debugger zu benutzen (Stichworte: Breakpoint, Watch Window).
Selbst wenn ich ganz genau wüsste was der Fehler ist (was ich nicht tue da ich mir den Code nicht wirklich angeschaut hab), würd ich dir nicht helfen wenn ich's dir verrate. Debuggen ist essentiell für jeden Programmierer, in etwa so wichtig wie atmen. Wenn ich dir ersparen würde das zu lernen, würd ich dir nicht helfen sondern schaden... |
_________________ one point of view will never reveal the entire scene.
Zuletzt bearbeitet von dot am 20:41:38 30.01.2012, insgesamt 3-mal bearbeitet |
|
 |
Robert1996
Mitglied
Benutzerprofil
Anmeldungsdatum: 21.07.2011
Beiträge: 86
|
Robert1996 Mitglied
20:43:37 30.01.2012 Titel: |
|
Zitieren |
Wie verfahre ich denn, wenn mein Programm stehen bleibt. Das Programm wird ja auch fehlerfrei compiliert, aber es kann nicht an die Position im Arbeitsspeicher schreiben. Kann man diesen Speicherplatz irgendwie resservieren? |
|
|
|
 |
dot
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.05.2004
Beiträge: 3858
|
dot Mitglied
20:47:04 30.01.2012 Titel: |
|
Zitieren |
Du siehst das falsch rum. Dein Programm ist fehlerhaft, erst darum versucht es an eine Stelle zu schreiben wo es nicht darf. Benutz den Gebugger um herauszufinden warum. Gibt sicher genug Tutorials wie man den Debugger benutzt... |
_________________ one point of view will never reveal the entire scene.
|
|
 |
Robert1996
Mitglied
Benutzerprofil
Anmeldungsdatum: 21.07.2011
Beiträge: 86
|
Robert1996 Mitglied
20:50:36 30.01.2012 Titel: |
|
Zitieren |
Als ich gerade gegooglet habe, habe ich zumindest keins gefunden. |
|
|
|
 |
dot
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.05.2004
Beiträge: 3858
|
dot Mitglied
20:54:31 30.01.2012 Titel: |
|
Zitieren |
|
 |
Robert1996
Mitglied
Benutzerprofil
Anmeldungsdatum: 21.07.2011
Beiträge: 86
|
Robert1996 Mitglied
20:55:48 30.01.2012 Titel: |
|
Zitieren |
OK...mit den richtigen Stichworten muss man dann noch googlen
Danke, dass du die so viel Zeit in mich "investiert" |
|
|
|
 |
Robert1996
Mitglied
Benutzerprofil
Anmeldungsdatum: 21.07.2011
Beiträge: 86
|
Robert1996 Mitglied
17:04:02 31.01.2012 Titel: |
|
Zitieren |
Nach einer Weile hin und her probieren mit Arrays und Zeigern habe ich nun das Problem, das ich nichts mehr lesen kann aus dem RAM. Im entdefekt bleibt das Programm unbrauchbar |
|
|
|
 |
Belli
Mitglied
Benutzerprofil
Anmeldungsdatum: 29.08.2009
Beiträge: 1110
|
Belli Mitglied
09:33:48 01.02.2012 Titel: |
Re: StreamWriter-Klasse |
Zitieren |
| 3P!CF41L schrieb: |
| C/C++ Code: | | name[200] = fname[200]; | |
| C/C++ Code: | | name[200] = fname[200]; | |
| C/C++ Code: | | name[200] = fname[200]; | |
|
Was soll das werden? So kopiert man keine C-Strings. Und überhaupt, die Mischung von char und TCHAR sieht auch sehr ungesund aus ...
und ...
| C/C++ Code: | void Write (char w[500])
{
char WriteLine[500] = {w[500]}; //was machst Du hier und warum?
fputs (w, file);
} | |
| C/C++ Code: | void Write (char w[500])
{
char WriteLine[500] = {w[500]}; //was machst Du hier und warum?
fputs (w, file);
} | |
| C/C++ Code: | void Write (char w[500])
{
char WriteLine[500] = {w[500]}; //was machst Du hier und warum?
fputs (w, file);
} | |
... Entschuldigung, aber ich habe den Eindruck, dass Dir ganz wichtige Grundlagen fehlen, fang erst mal mit was einfachem an ... |
Zuletzt bearbeitet von Belli am 09:37:32 01.02.2012, insgesamt 1-mal bearbeitet |
|
 |
fail+
Unregistrierter
|
fail+ Unregistrierter
01:00:00 02.02.2012 Titel: |
|
Zitieren |
Das ist ja eine Katast....
Lerne mal C Grundlagen!!
Denn scheinbar begreifst Du überhaupt nichts... |
|
|
|
 |
fail+
Unregistrierter
|
fail+ Unregistrierter
01:03:05 02.02.2012 Titel: |
|
Zitieren |
Wir sind hier nicht in der Vb Kinderecke... |
|
|
|
 |