Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    280

    [C] stranezze realloc C

    ciao a tutti, volevo capire come mai mettendo del codice in una funzione e richiamando quella funzione non va, mi da un errore di realloc, mentre lasciandolo nel main è tutto perfettamente fuznionante.. vi copio il codice

    codice:
    int p[2];
    
    pipe(p);
    
    int isfork;
    isfork = fork();
    
    if(isfork == 0){
    
    dup2(p[1],1);
    close(p[0]);
      char *args[2] = { "date", NULL };
    execvp (args[0], args);
    }
    
    else
    {
    
    char c;
    char *stringa = malloc(sizeof(char *));
    int i = 0;
    
    dup2(p[0],0);
    close(p[1]);
    while( read(p[0],&c,sizeof(c) ) ){
    stringa = realloc(stringa, (i + 1) * sizeof(char *));
    i++;
    strcat(stringa,&c);
    printf("%c",c);
    }
    
    printf("%s",stringa);
    }
    se questo lo metto in una funzione void, o int , o char che sia mi da il seguente errore

    *** glibc detected *** realloc(): invalid next size: 0x0804a008 ***
    SAborted

    non reisco proprio a capire l'errore qual è se funziona nel main.. boh.. ditemi voi.. grazie.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ma perche' allochi puntatori a char invece di char ?

    Non deve essere

    char *stringa = malloc(sizeof(char *));
    e
    stringa = realloc(stringa, (i + 1) * sizeof(char *));

    ma

    char *stringa = malloc(sizeof(char));
    e
    stringa = realloc(stringa, (i + 1) * sizeof(char));

    P.S. Usa un titolo piu' significativo ...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    280
    ho provato a usare puntatori char invece di puntatori a char, ma il risultato nn cambia
    ho cambiato il nome.. grazie cmq

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da magicofred
    ho provato a usare puntatori char invece di puntatori a char, ma il risultato nn cambia
    ho cambiato il nome.. grazie cmq
    Che vuoi dire? Puntatori char invece che puntatori a char?

    E poi non puoi usare la strcat

    strcat(stringa,&c);

    con un dato di tipo char ... devono essere due puntatori a char, terminati da un carattere 0 binario, cioe' una stringa.

    Usando la strcat in questo modo, hai un funzionamento anomalo non prevedibile, dipendente dalla situazione della memoria in quel momento, cosa che giustificherebbe il comportamento diverso in diverse situazioni.

    In ogni caso, stai usando in modo sbagliato i puntatori a char e le funzioni associate ...

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    280
    Originariamente inviato da oregon
    Che vuoi dire? Puntatori char invece che puntatori a char?

    E poi non puoi usare la strcat

    strcat(stringa,&c);

    con un dato di tipo char ... devono essere due puntatori a char, terminati da un carattere 0 binario, cioe' una stringa.

    Usando la strcat in questo modo, hai un funzionamento anomalo non prevedibile, dipendente dalla situazione della memoria in quel momento, cosa che giustificherebbe il comportamento diverso in diverse situazioni.

    In ogni caso, stai usando in modo sbagliato i puntatori a char e le funzioni associate ...
    mi suggereresti una soluzione o mi diresti in cosa sbaglio? magari con un esempio, grazie

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Mah ... non lo posso provare, ma scriverei qualcosa del genere ...

    codice:
    char c;
    char *stringa = malloc(sizeof(char));
    stringa[0]=0;
    int i = 0;
    
    dup2(p[0],0);
    close(p[1]);
    while( read(p[0],&c,sizeof(c) ) )
    {
      i++;
      stringa = realloc(stringa, (i + 1) * sizeof(char));
      stringa[i-1]=c;
      stringa[i]=0;
    }
    
    printf("%s",stringa);

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    280
    Originariamente inviato da oregon
    Mah ... non lo posso provare, ma scriverei qualcosa del genere ...

    codice:
    char c;
    char *stringa = malloc(sizeof(char));
    stringa[0]=0;
    int i = 0;
    
    dup2(p[0],0);
    close(p[1]);
    while( read(p[0],&c,sizeof(c) ) )
    {
      i++;
      stringa = realloc(stringa, (i + 1) * sizeof(char));
      stringa[i-1]=c;
      stringa[i]=0;
    }
    
    printf("%s",stringa);
    GRAZIE 100000

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.