Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    Problema errore di segmentazione [C]

    Salve
    mi potreste aiutare a trovare l'errore di segmentazione in questo programma?
    Non so se il problema è dovuto alla realloc...

    Grazie


    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define DIM 5
    
    
    /*Realizzare un programma che permetta di memorizzare i voti di una disciplina. 
    Non conoscendo a priori la quantita' di valutazioni il programma inizialmente allochera' 
    in modo dinamico lo spazio sufficiente per 5 voti. 
    Successivamente, quando lo spazio si esaurira', verra' allungato lo spazio precedente 
    in modo da poter inserire altre 5 valutazioni. */
    
    
    main(){
        int cont=0,n=0,continua=1;
        int *ptrvoti=NULL,*app=NULL;
    
    
        ptrvoti = (int*)malloc(sizeof(int)*5);
        if(ptrvoti==NULL){
            printf("ERRORE\n");
            return;
        }
    
    
        app=ptrvoti;
    
    
        while(cont<DIM && continua==1){
            printf("Vuoi continuare ad inserire voti? (1 per continuare, 0 per terminare) \n");
            scanf("%d", & continua);
            if(continua==1){
                printf("inserisci voto \n");
                scanf("%d", ptrvoti);
                n++;
                ptrvoti++;
            }
            else if(continua==0){
                break;
            }
            else{
                printf("ERRORE\n");
                return;
            }
            if(n==5){
                ptrvoti = (int*)realloc(ptrvoti,sizeof(int)*(5+DIM));
                cont=0;
            }
            cont++;
        }
        ptrvoti=app;
        for(cont=0;cont<n;cont++){
            printf("%d ", *ptrvoti);
            ptrvoti++;
        }
    }
    Ultima modifica di Thunder2410; 08-05-2015 a 19:11

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Intanto occhio a questa linea

    if(n=5){
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    giusto, pericolosa svista
    ma rimane l'errore

  4. #4
    momento, su compilatore DevC++ funziona ma su macchina virtuale debian no...
    non è che per caso qualcuno potrebbe testarlo?

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Quote Originariamente inviata da Thunder2410 Visualizza il messaggio
    momento, su compilatore DevC++ funziona ma su macchina virtuale debian no...
    non è che per caso qualcuno potrebbe testarlo?
    Cosa fai per avere l'errore?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    lo compilo normalmente in debian (ho scoperto ora che su devC++ quando i voti diventano più di 5 da questo errore:

    codice:
    *** Error in `main': realloc(): invalid pointer: 0x0000000000902024 ***                                                                                                                                      
    ======= Backtrace: =========                                                                                                                                                                                 
    /lib64/libc.so.6(+0x7850e)[0x7fdf1dfcf50e]                                                                                                                                                                   
    /lib64/libc.so.6(+0x85e70)[0x7fdf1dfdce70]                                                                                                                                                                   
    /lib64/libc.so.6(realloc+0x1d7)[0x7fdf1dfdbc87]                                                                                                                                                              
    main[0x400763]                                                                                                                                                                                               
    /lib64/libc.so.6(__libc_start_main+0xf0)[0x7fdf1df76fe0]                                                                                                                                                     
    main[0x4005b9]
    Ultima modifica di Thunder2410; 08-05-2015 a 19:45

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Non puoi usare la realloc con un puntatore diverso da quello restituito dalla malloc.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    concordo, difatti utilizzo lo stesso puntatore in entrambi (ptrvoti)

  9. #9
    rettifico: su macchina virtuale non mi da più errore ma ora si comporta come devC++ (da errore se supero i 5 voti).
    Ma il realloc fa riniziare a puntare il puntatore dall'inizio del vettore o da dove era arrivato prima perchè potrebbe essere questo l'errore...

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    No ... non è così ... deve avere lo stesso valore mentre tu lo cambi (ptrvoti++) ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.