Core dump creato... Ma perché?

di il
7 risposte

Core dump creato... Ma perché?

Nel codice qui sotto riportato c'è scritto qualcosa di strano per meritarsi un core dump?
#include <sys/socket.h>
#include <sys/types.h>
#include <stdio.h>
#include <netinet/in.h>

int main(int argc, char *argv[]){
	struct sockaddr_in client;
	int sock;
	client.sin_family = AF_INET;
	client.sin_port = 80;
	client.sin_addr.s_addr = (long int)argv[1];
	
	if ((sock = socket(AF_INET, SOCK_STREAM, 0))<0){
		printf("Errore\n");
	}
	if (connect(sock, (struct sockaddr *) &client, sizeof(struct sockaddr))<0){
		printf("Connessione avvenuta.\n\n");
	}else{
		printf("Interruzione\n");
		return 1;
	}
	char *messaggio;
	printf(">");
	scanf("%s", messaggio);
	int nm = sizeof(messaggio);
	
	if (write(sock, messaggio, nm)<0){
		printf("Interruzione");
		return 1;
	}
	return 0;
}

7 Risposte

  • Re: Core dump creato... Ma perché?

    Ciao Ulysses,
    la variabile 'messaggio' non è inizializzata.

    Ulysses ha scritto:


    char *messaggio;
    printf(">");
    scanf("%s", messaggio);
    .
  • Re: Core dump creato... Ma perché?

    Ok l'ho inizializzata, ma ora mi dice:
    warning: implicit declaration of function ‘write’ [-Wimplicit-function-declaration]
  • Re: Core dump creato... Ma perché?

    Ok ho risolto, bastava usare la funzione send(), ma ecco un nuovo macello: il core dump si crea comunque a fine programma dopo aver inviato i dati. Ora provo con gdb ma non credo che risolverò.
  • Re: Core dump creato... Ma perché?

    Ulysses ha scritto:


    Ok l'ho inizializzata, ma ora mi dice:
    warning: implicit declaration of function ‘write’ [-Wimplicit-function-declaration]
    Per usare la write devi includere #include <unistd.h>
  • Re: Core dump creato... Ma perché?

    Ho usato send e ora ho provato anche write. Risultato? "Core dump creato". Fra un po' mi metto a piangere sul serio.
  • Re: Core dump creato... Ma perché?

    Invia nuovamente il nuovo codice che hai scritto.
  • Re: Core dump creato... Ma perché?

    #include <sys/socket.h>
    #include <sys/types.h>
    #include <stdio.h>
    #include <netinet/in.h>
    #include <unistd.h>
    
    int main(int argc, char *argv[]){
       struct sockaddr_in client;
       int sock;
       client.sin_family = AF_INET;
       client.sin_port = 80;
       client.sin_addr.s_addr = (long int)argv[1];
       
       if ((sock = socket(AF_INET, SOCK_STREAM, 0))<0){
          printf("Errore\n");
       }
       if (connect(sock, (struct sockaddr *) &client, sizeof(struct sockaddr))<0){
          printf("Connessione avvenuta.\n\n");
       }else{
          printf("Interruzione\n");
          return 1;
       }
       char *messaggio;
       printf(">");
       scanf("%s", messaggio);
       int nm = sizeof(messaggio);
       
       if (write(sock, messaggio, nm)<0){   /*if(send(sock, messaggio, nm, 0)<0)  quando ho usato il comando send*/
          printf("Interruzione");
          return 1;
       }
       return 0;
    }
    Questo.
    Comunque il codice è copiato passo passo da un tutorial. Possibile che emergano errori? (beh a quanto pare sì)
Devi accedere o registrarti per scrivere nel forum
7 risposte