[C] Programmabsturz bei alloziierung einer übergebenen varaible

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [C] Programmabsturz bei alloziierung einer übergebenen varaible

    Hi,
    folgender code (vereinfacht)

    Code:
    void get_artists(int socket, char * recivedMessage)
    {
    	recieved_size = recieve_message_size();
    	buf[recieved_size] = recieve_message_of_variable_length();
    	recivedMessage = (char*)malloc(recieved_size);
    	printf("recievedMessage-size: %d\n", sizeof(recivedMessage));
    	return;
    }
    
    char * buffer;
    
    get_artists(socket, buffer);
    printf("get_artists returned: %s", buffer);
    lässt mein Programm nach der Ausgabe von "recievedMessage-size: 15" einfrieren/abstürzen. Kann sich einer erklären warum? Oder hat jemand vielleicht ne alternative Methode einen String von variabler länge den ich über TCP erhalte, aus der funktion (z.B. als Rückgabewert) zu erhalten?

  • #2
    Das da oben ist übrigens simplifizierter Code zur veranschaulichung des problems; Hier der richtige Code:

    Code:
    void get_artists(int socket, char * recivedMessage)
    {
    	char *command;
    	int command_len;
    	char artist_list_length_c[8];
    	int artist_list_length;
    	long rc;
    
    	command = "get_artists";
    	command_len = strlen(command);
    
    	if (send(socket, command, command_len, 0) != command_len) {
            printf("send() sent a different length of bytes than expected!\n");		// needs real exceptionhandling
    		return;
    	}
    	printf("\n\nsending command get_artists...\n");
    
    
    	if((rc = recv(socket, artist_list_length_c, 8,0)) < 0) {
    		printf("Error while recieving the artist-list-length; error-code: %s\n",strerror(errno));
    		return;
    	}
    	if(rc==0) {
    		printf("Client has closed the connection before sending the artist-list-length\n");
    		return;
    	}
    
    	printf("Recieving artist-list-length\n");
    	artist_list_length_c[rc]='\0';
    	artist_list_length = atoi(artist_list_length_c);
    	printf("Artistlist length: %d\n", artist_list_length);
    	artist_list_length++;
    	char buf[artist_list_length];
    
    	recivedMessage = (char*)malloc(artist_list_length);
    
    	printf("recieving artist-list...\n");
    	rc = recv(socket,buf,artist_list_length,0);
    	if(rc==0)
    	{
    		printf("Server has closed the connnection before sending the artist-list\n");
    		return;
    	}
    	if(rc==SOCKET_ERROR)
    	{
    		printf("Error: recv, error-code: %s\n",strerror(errno));
    		return;
    	}
    	buf[rc]='\0';
    	strcpy(recivedMessage, buf);
    	printf("recivedMessage length: %d\n", strlen(recivedMessage));
    	printf("buf: %s\n", buf);
    
    	return;
    }
    In einer anderen Funktion, die in main() aufgerufen wird:

    Code:
    	char* artist_list;
    
    	get_artists(sock, artist_list);
    	printf("\n\nget_artists returned: %s\n", artist_list);

    Kommentar


    • #3
      Ich hab's mit dem alloziieren direkt nach der initialisierung der variable und späterem realloziieren probiert und es geht

      Kommentar


      • #4
        Dich lässt man hier ein bischen alleine und schon regelt sich alles von selbst.

        Erstell dir mal ein Blog, manchen hilfts
        gruss Chris

        [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

        Kommentar


        • #5
          pfff... lol

          Kommentar

          Lädt...
          X