Debugging Hilfe

OP #4870907
Lesenswert?
• ▲
▼
Hallo,
könnte jemand von euch mir meinen Code über Valgrind oder Splint oder 
ähnliches laufen lassen und mir die Fehlermeldungen ausgeben?
Weiß nicht so recht wie das geht... Bei meinem Code stürzt das Programm 
nämlich dann ab, wenn es return 0; erreicht. Ich weiß ist im Moment echt 
schlecht geschrieben, ist eher nur zu Testzwecken programmiert.

MfG
Angehängte Dateien:
Gast #4870913
Lesenswert?
• ▲
▼
Also wenn ich schon Code sehe, der "goto" für was anderes als 
Fehlerbehandlung verwendet, und wo nichtmal die Einrückungen sinnvoll 
gesetzt sind, und wo bei calloc nicht auf Nullpointer gecheckt wird, 
dann wundert mich ein Crash nicht.

Das ist selbst zu "Testzwecken" dermaßen schlecht geschrieben, daß hier 
ursächlich ein Layer-8-Problem vorliegt. Kein Wunder, daß Du Dich in 
Deinem chaotischen Spaghettizeug nicht zurechtfindest.

Davon ab meldet CppCheck für Zeile 40:
fflush() called on input stream 'stdin' may result in undefined 
behaviour on non-linux systems.
#4870914
Lesenswert?
• ▲
▼
Erstens: Valgrind funktioniert so, dass man statt "./programm" einfach 
"valgrind ./programm" startet. Splint lässt man eher auf den Quelltext 
los.

Zweitens: Wenn du Scheiße programmieren möchtest, dann musst du auch 
Scheiße debuggen können. Mach es lieber gleich richtig, dann hast du 
später weniger Stress.

Drittens: Wenn du viel mit Strings hantierst und Geschwindigkeit eher 
nebensächlich ist, dann sind Scriptsprachen evtl. besser geeignet als C.
Gast #4870922
Lesenswert?
• ▲
▼
S. R. schrieb:
> Drittens: Wenn du viel mit Strings hantierst und Geschwindigkeit eher
> nebensächlich ist, dann sind Scriptsprachen evtl. besser geeignet als C.

Ich würde auch Pascal empfehlen. Zwar ist das wie Radfahren mit 
Stützrädern, aber es läßt ziemlich viel Unsinn gar nicht erst zu, was 
bei dem unterirdischen Codingniveau eine große Hilfe wäre.
Gast #4870984
Lesenswert?
• ▲
▼
pz = Primzahl?
Also ein Sieb des Eratosthenes? Dafür gibt es doch schon unzählige 
Lösungen im Web.


Ne, mal ehrlich. Vielleicht sollte man den Variablen vernünftige Namen 
geben. Und auch mal kommentieren was Zeilen wie
  if(strlen(BN)<=9 && strlen(BN)>=7) strcpy(Benutzername[j],BN);
bezwecken sollen.

Normalerweise werden Grossbuchstaben-Identifier wie BN für Makros und 
defines benutzt.

Debug einfach dein Programm mal selber. Dann ist der Lerneffekt am 
höchsten.
Gast #4871319
Lesenswert?
• ▲
▼
PittyJ schrieb:
> Debug einfach dein Programm mal selber. Dann ist der Lerneffekt am
> höchsten.

Der Lerneffekt dürfte dann auch zum Verständnis eines bekannten Zitats 
von  Kerninghan beitragen:

Es ist allgemein bekannt, daß Debuggen doppelt so schwierig ist wie ein 
Programm überhaupt zu schreiben. Wenn man also den Code so clever 
schreibt, wie man kann, wie soll man das jemals debuggen?
Gast #4871517
Lesenswert?
• ▲
▼
Nop schrieb:
> Der Lerneffekt

Ich frage mich zunächst, was sich der Lehrer bei der Aufgabe gedacht 
hat.

So eine Anwendung in C zu schreiben ist doch nun wirklich kein Vergnügen 
-- und damit ist der ausbleibende Lerneffekt doch schon programmiert. C 
mag auch für Anfänger ein sinnvoller Einstieg sein, aber dann muss man 
sich eben auf den Algorithmus als solchen konzentrieren, und sich nicht 
zunächt mit Trivalitäten wie Speicher-Allozierung konzentrieren. So ist 
doch klar, dass die Kinder C gleich als eklig empfinden werden und sich 
dann auf Webdesign mit Java-Script freuen, oder eben von Informatik ganz 
die Finger lassen.

(Und klar ist Speicher-Allozierung und Debugging extrem wichtig, wenn 
man dann tatsächlich später beruflich mit C arbeitet.)
#4871711
Lesenswert?
• ▲
▼
Der code ist ja so richtig sch....

Fängt auch schon gut an:
1
char **Benutzername,
2
char **Passwort;
3

4
Benutzername=calloc(100,1);
5
Passwort=calloc(100,1);

Meep, falsch. Sollte nämlich besser calloc(100, sizeof(char*)) heissen,
so wird nur 1/4 oder 1/8 des benötigten Speichers allokiert.

Damit hast Du hier:
1
for(i=0;i<100;i++){
2
    Benutzername[i]=calloc(20,1);
3
    Passwort[i]=calloc(20,1);
4
}

einen fiesen Heap-überlauf. Der knallt hier nicht sofort, sondern erst 
unten beim free() Aufruf.

Den Rest schenke ich mir, da werden sicher noch mehr Fehler drin sein.
Gast #4871981
Lesenswert?
• ▲
▼
Stefan S. schrieb:
> Ich frage mich zunächst, was sich der Lehrer bei der Aufgabe gedacht
> hat.

Ja, daß es sich dabei um den Versuch einer Hausaufgabe handelt, die mit 
"Testzwecken" nichts zu tun hat, ist offensichtlich. Angesichts dessen, 
wie das runtergerotzt ist, bezweifle ich, daß das so gefordert war.

Sieht mir eher aus, als sei das Semester fortgeschritten, der TO hat den 
Anschluß verloren, und jetzt funktioniert "es irgendwie halbverstanden 
runterhacken" nicht mehr.

Wenn ich mich an meinen C-Kurs in der Uni entsinne, die Vorlesung fand 
ich dermaßen schlecht, daß ich mir nur die Übungsblätter für den 
Hausaufgabenschein rausgeholt habe und dann eigenständig mit nem 
C-Lehrbuch gearbeitet habe.

> So ist
> doch klar, dass die Kinder C gleich als eklig empfinden werden

Falls es sich um einen Programmierkurs an der Uni handelt, kann das 
durchaus Absicht sein, und zurecht:

https://www.joelonsoftware.com/2005/12/29/the-perils-of-javaschools-2/

"All the kids who did great in high school writing pong games in BASIC 
for their Apple II would get to college, take CompSci 101, a data 
structures course, and when they hit the pointers business their brains 
would just totally explode, and the next thing you knew, they were 
majoring in Political Science because law school seemed like a better 
idea. I’ve seen all kinds of figures for drop-out rates in CS and 
they’re usually between 40% and 70%. The universities tend to see this 
as a waste; I think it’s just a necessary culling of the people who 
aren’t going to be happy or successful in programming careers."

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren