[C-Fehler]

05/04/2012 21:39 ƬheGame#1
Hi,
Ich arbeite gerade an einem kleinen Konsolen Programm nun wollte ich das hier ausgeben:
Code:
		while(ptr_to_next_output->next != 0)
		{
			printf("Name %s\n", ptr_to_next_output->name);
			printf("Age %d\n", ptr_to_next_output->age);
			printf("Size %d\n", ptr_to_next_output->size);
			printf("Id %d\n", ptr_to_next_output->id);
			ptr_to_next_output = ptr_to_next_output->next;
		}
Dann hängt sich das Programm einfach auf .... ich weis nur nicht wieso.
Also es gibt alles aus und dann hängt es sich auf :)

€: Ist das Programm vielleicht depressiv?
05/04/2012 21:46 jacky919#2
Debuggen?
05/04/2012 21:54 ƬheGame#3
ansi-c debuggen klar :)
läuft sauber durch mingw also sollte es funktionieren hab auch schon mit wall flag versucht
05/04/2012 22:20 ms​#4
Quote:
Originally Posted by ƬheGame View Post
ansi-c debuggen klar :)
Was hat das eine mit dem anderen zu tun?

Quote:
Originally Posted by ƬheGame View Post
Code:
		while(ptr_to_next_output->next != 0)
richtig wäre

Code:
		while(ptr_to_next_output)
Wenn du am Ende der Liste angelangt bist ist ptr_to_next_output ein NULL-Pointer. Das Programm crasht weil du einen NULL-Pointer dereferenzieren willst.
05/04/2012 22:32 Dr. Coxxy#5
nö, das ist schon richtig "NULL == 0".
sollte eigtl so klappen, hast wahrscheinlich die liste nicht richtig initialisiert.

ist wahrscheinlich logisch nicht ganz richtig, weil du schon vor dem letzten rausfliegst, sollte aber eigtl keinen fehler verursachen, es sei denn der anfangsptr ist direkt NULL.
05/04/2012 22:34 ms​#6
Quote:
Originally Posted by Dr. Coxxy View Post
nö, das ist schon richtig "NULL == 0".
sollte eigtl so klappen, hast wahrscheinlich die liste nicht richtig initialisiert.
Lies nochmal genau was ich geschrieben habe.
05/04/2012 22:37 xNopex#7
Quote:
Wenn du am Ende der Liste angelangt bist ist ptr_to_next_output ein NULL-Pointer.
Das Problem ist nicht das Ende. Er würde am Ende nur eins auslassen. Das problem ist, wenn bei der ersten Abfrage ptr_to_next_output NULL ist.
05/04/2012 22:39 ms​#8
Quote:
Originally Posted by xNopex View Post
Das Problem ist nicht das Ende. Er würde am Ende nur eins auslassen. Das problem ist, wenn bei der ersten Abfrage ptr_to_next_output NULL ist.
Nein, ich habe Recht.
05/04/2012 22:44 xNopex#9
Leider nicht... Mals dir dochmal hin.
05/04/2012 22:46 Dr. Coxxy#10
richtig was xNopex sagt, hab ich ja auch schon gesagt:
Quote:
ist wahrscheinlich logisch nicht ganz richtig, weil du schon vor dem letzten rausfliegst, sollte aber eigtl keinen fehler verursachen, es sei denn der anfangsptr ist direkt NULL.
05/04/2012 22:46 ms​#11
Habs mir aufgemalt. Ich habe immernoch Recht.
05/04/2012 22:49 xNopex#12
Dr. Coxxy: Sry hab ich voll überlesen xD

EDIT: Ne hassu nicht...
05/04/2012 22:51 Dr. Coxxy#13
Quote:
Originally Posted by Metin2Spieler97 View Post
Habs mir aufgemalt. Ich habe immernoch Recht.
nein, hast du nicht, du hättest recht, wenn die schleife logisch "richtig" arbeiten würde und bis zum letzten gehen würde, diese schleife fliegt aber schon beim vorletzten raus, weshalb ptr_to_next_output-> next innerhalb der schleife NIE 0 werden kann (es sei denn direkt das erste ist 0...).
05/04/2012 22:53 xNopex#14
Kleine Verbesserung: ptr_to_next_output wird nie NULL (außer gleich am Anfang). Aber sonst stimmts.
05/04/2012 22:55 ms​#15
Na gut ich habe gemogelt. Ich habs mir nicht aufgemalt.