Strcmp e core dumped

di Anonimizzato4577 il
4 risposte
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

  • 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..
  • 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.
  • 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..
Devi accedere o registrarti per scrivere nel forum
4 risposte