Strcmp e core dumped

di il
4 risposte

Strcmp e core dumped

Ho un problema con C, forse un po' stupido...
ma quando faccio partire il programma non ho problemi ma mi da errore quando inserisco FINE (Segmentation faul (core dumped))...........secondo me è strcmp ma nn riesco a metterlo a posto....
   DOMANDA * i;
   DOMANDA * j;   DOMANDA * i;
   DOMANDA * j;
   char verbum [50];
   char *p;
   float a, b;
   int n;
 
printf("NOME T1 T2");
scanf("%s", verbum);
p = (char *) malloc (strlen(verbum)+1);
strcpy (p, verbum);
n = strcmp(p, "FINE");

while (n != 0)      {  
   j = nuova_domanda (p, 0, 0);
   scanf ("%f %f", &a, &b);
   j->t1 = a; j->t2 = b;
   ordina (j, i);
   printf ("NOME T1 T2");
   scanf ("%s", verbum);
   p = (char *) malloc (strlen(verbum)+1);
   strcpy (p, verbum);
   n = strcmp(p, "FINE");
}

4 Risposte

  • Re: Strcmp e core dumped

    Ciao, secondo me invece la causa del tuo segfault è dovuta all'uso della malloc su p. Infatti p è un vettore di caratteri statico che non può essere reallocato con la malloc.. Prova a commentare quella riga di codice e vedi se funziona..
  • Re: Strcmp e core dumped

    Secondo me l'errore non è nella malloc(). Prova a postare il codice della funzione nuova_domanda() e magari anche la struttura DOMANDA.
    Se non hai un ambiente di debug, prova ad inserire delle printf() in alcune parti del codice per verificare su quale istruzione c'è l'errore.
  • Re: Strcmp e core dumped

    Ciao,
    sicuramente il problema è nell'errato uso della malloc..
    1) hai scritto p = (char *) malloc (strlen(verbum)+1); ma dentro la malloc devi segnalare i byte da assegnare, perciò va corretta in: p = (char *) malloc ( (strlen(verbum)+1)*sizeof(char) );

    2) dentro il while, continui ad usare la malloc su p ma non è una cosa lecita se p è già stato precedentemente allocato, dovresti invece usare la funzione realloc, per riassegnare la memoria dinamica..ossia così:
    p = (char *) realloc (p, strlen(verbum)+1);

    Prova e dimmi se ti da altri errori..
  • Re: Strcmp e core dumped

    Dovreste ripetere un po lequesta funzione, quì c'è un esempio sull'utilizzo della malloc.
    http://www.cplusplus.com/reference/clibrary/cstdlib/malloc.html

    Io sono convinto che l'errore è nelle altre funzioni che ha scritto, prova a postarle.
Devi accedere o registrarti per scrivere nel forum
4 risposte