Komischer fehler beim Auswerten eines Strings



  • Hi,
    Ich schicke einen String per TCP um daraus datenstrukturen zu machen. Ich schicke (Musik)Künstlernamen, die Anzahl derer Alben, und die Albennamen selber. Am Anfang des Strings steht noch die gesamtzahl der Künstler (5 byte), und vor jedem Künstler- und Albumnamen die länge des namens in 3 byte. Um den Strin auszuwerten und in Datenstrukturen zu verwandeln habe ich folgendes geschrieben:

    // Anzahl der Artists auslesen
    memcpy(num_artists, artist_data, 5);
    num_artists[5]='\0';
    offset = 5;
    printf("num artists: %d\n", atoi(num_artists));
    
    int i,j;
    for(i=0; i<atoi(num_artists); i++)
    {
    	// Länge des Künstlernamens lesen
    	memcpy(artist_name_lenght_c, &artist_data[offset], 3);
    	artist_name_lenght_c[3]='\0';
    	artist_name_lenght = atoi(artist_name_lenght_c);
    	offset += 3;
    	// Künstlernamen lesen
    	artist_name = (char *)realloc(artist_name, artist_name_lenght+1);
    	memcpy(artist_name, &artist_data[offset], artist_name_lenght);
    	artist_name[artist_name_lenght]='\0';
    	offset += artist_name_lenght;
    
    	// Anzalh alben des Künstlers (4 byte)
    	memcpy(num_albums_c, &artist_data[offset], 4);
    	num_albums_c[4]='\0';
    	num_albums = atoi(num_albums_c);
    	offset += 4;
    
    	printf("artist #%d: %s (%d), %d albums:\n", i, artist_name, artist_name_lenght, num_albums);
    
    	if(num_albums==0) num_albums=1;
    	for(j=0;j<num_albums;j++)
    	{
    		// Länge des Albennamens
    		memcpy(album_name_length_c, &artist_data[offset], 3);
    		album_name_length_c[3]='\0';
    		album_name_length = atoi(album_name_length_c);
    		offset += 3;
    		// Albumname
    		album_name = (char *)realloc(album_name, album_name_length+1);
    		memcpy(album_name, &artist_data[offset], album_name_length);
    		album_name[album_name_length]='\0';
    		offset += album_name_length;
    
    		printf("     %s (%d)\n", album_name, album_name_length);
    	}
    }
    

    Das Problem ist dass er nur 516 von 517 Künstlern, und - nur beim 516ten Künstler - 4 von 5 Alben ausließt. Alles andere klaptt perfekt!



  • debugge dein programm.



  • Das ist so ne Sache... ich lass das auf der PSP laufen und hab noch nie debugt...

    Nochwas: Das oben geschriebene ist in der funktion get_artists enthalten. Wenn ich for(i=1; i<515; i++) benutze printed er mir alle 514 artists und deren alben, aber nachdem die funktion zu ende ist (ich printe 'Closing connection' direkt danach) spuckt er mir noch drei weitere alben aus! Das ist unmöglich! Und wenn ich for(i=1; i<=514; i++) mache geht er nur bis zum 26ten Artist! Ich bin echt verwirrt!


Anmelden zum Antworten