Problema malloc

di il
8 risposte

Problema malloc

Salve a tutti non riesco a capire cosa devo inserire in questa malloc

#include<stdlib.h>
#include<stdio.h>
#include<string.h>

char* f(char *d)
{
	char *ret;
	ret=(char *)malloc(.......);
	strcpy(ret,d);
	return ret;
}

int main(int argc, char **argv)
{
	char d[9999];
	sprintf(d,"d=%d",argc);
	printf("%s",f(d));
 }

8 Risposte

  • Re: Problema malloc

    Devi metterci strlen(d)+1
    Attenzione però a come utilizzi la funzione f(): dovresti tenere traccia del puntatore per poter poi deallocare la memoria con free().
    In C non c'è il garbage collector!
  • Re: Problema malloc

    candaluar ha scritto:


    Devi metterci strlen(d)+1
    Attenzione però a come utilizzi la funzione f(): dovresti tenere traccia del puntatore per poter poi deallocare la memoria con free().
    In C non c'è il garbage collector!
    Grazie mille per la risposta questo non è un codice che ho fatto io ma una prova d'esame.... avevo pensato pure io allo strlen ma perchè +1? poi la traccia mi chiede questo: "Indicare un opportuno valore per la malloc in riga 6. Indicare cosa fa il programma
    e cosa viene stampato se, dopo la compilazione, viene eseguito nella seguente modalità.
    ./a.out 3 per 3"

    ma dove lo devo mette sto 3 per 3?
  • Re: Problema malloc

    Il +1 serve per il terminatore di stringa C: es. la stringa "CIAO" è lunga 4 caratteri (strlen() ti ritorna 4 caratteri) ma per essere memorizzata ha bisogno di 5 caratteri perchè deve essere terminata, ovvero in memoria avrai i seguenti caratteri 'C' 'I' 'A' 'O' '\0'
    Per il secondo punto, cosa succede con questa chiamata ./a.out 3 per 3 ti suggerisco di studiare bene i parametri a linea di comando argc e argv, aiutandoti solo nel dirti che ./a.out è il nome dell'"eseguibile" in Linux e "3 per 3" sono gli argomenti.
  • Re: Problema malloc

    candaluar ha scritto:


    Il +1 serve per il terminatore di stringa C: es. la stringa "CIAO" è lunga 4 caratteri (strlen() ti ritorna 4 caratteri) ma per essere memorizzata ha bisogno di 5 caratteri perchè deve essere terminata, ovvero in memoria avrai i seguenti caratteri 'C' 'I' 'A' 'O' '\0'
    Per il secondo punto, cosa succede con questa chiamata ./a.out 3 per 3 ti suggerisco di studiare bene i parametri a linea di comando argc e argv, aiutandoti solo nel dirti che ./a.out è il nome dell'"eseguibile" in Linux e "3 per 3" sono gli argomenti.
    giusto non avevo pensato al carattere terminatore grazie mille ancora
  • Re: Problema malloc

    Quel pezzetto di codice stampa una stringa con scritto d=4. Non aggiungo altro sul codice,però sappi che non va bene.
  • Re: Problema malloc

    loopunrolling ha scritto:


    Quel pezzetto di codice stampa una stringa con scritto d=4. Non aggiungo altro sul codice,però sappi che non va bene.
    senza i 3 mi stampa 1 comunque il codice non l'ho scritto io ma è un esercizio di una prova d'esame
  • Re: Problema malloc

    @loopunrolling: siccome si tratta di un esercizio non ho voluto dare la risposta ma solo dare dei suggerimenti al nostro amico per trovarla.

    Comunque, per fine educativo, anche se in questo forum mi è stato già dato del pignolo , io suggerirei al professore di modificare la chiamata così
    int main(int argc, char **argv)
    {
       char d[9999];
       char *p;
       sprintf(d,"d=%d",argc);
       p = f(d);
       if( p )					// <- verifica che l'allocazione ha avuto successo
       {
          printf("%s",p);
          free(p);				// <- deallocazione
       }
     }
    e anche la funzione f() andrebbe modificata
    char* f(char *d)
    {
       char *ret;
       ret=(char *)malloc(strlen(d)+1);
       if( ret )					// <- verifica che l'allocazione ha avuto successo
           strcpy(ret,d);
       return ret;
    }
  • Re: Problema malloc

    Output senza i tre su Linux
    
    xenon@cray-1:/media/veracrypt2/Esercizi$ ./tmp per
    d=2
    
Devi accedere o registrarti per scrivere nel forum
8 risposte