Malloc e output

di il
14 risposte

Malloc e output

Ciao devo scrivere un programma dove inserisco 20 numeri nel vewttore,
poi un numero N,
il programma ricerca N e mi stampa quante volte io l'ho inserito nel ettore, + la sua posizione
nell'indice.
sono riuscito a fare tutto tranne un passaggio e poi una curiosità mia.
non riesco a far visualizzare la posizione dell'indice.
inoltre vorrei far stampare tutti i numeri salvati dalla malloc.. come si fa??
#include <stdio.h>
#include <stdlib.h>
#define N 10
int a[N];
main()
{
int i,n,c;
int *sptr;
sptr=&a[N];
sptr=(int*)malloc(a[N]*sizeof(int));
for (i=0;i<N;i++){
printf("inserire numeri: ");
scanf("%d",&a[i]);}
printf("\ninserire il numero da ricercare: ");
scanf("%d",&n);
c=0;
for (i=0;i<N;i++){
    if (a[i]==n){
        c=c+1;}
 }
        printf("\nil numero \x8A stato trovato:%d volte",c);
        free(sptr);
}

14 Risposte

  • Re: Malloc e output

    Queste linee

    sptr=&a[N];
    sptr=(int*)malloc(a[N]*sizeof(int));

    non hanno senso e sono sbagliate.


    La posizione é uguale al valore di i nel ciclo di ricerca
  • Re: Malloc e output

    Scusami è come faccio ad allocare dinamicamente con la malloc? io avevo utilizzato un puntatore..
    per quanto riguarda la posizione cosi?
    printf("\nla sua posizione:%d",i)
    ma se lo faccio mi riscrive la sua posizione da 1-9
    la posizione l'ho risolta inserendo all'interno dell if e poi ho chiuso la parentesi
    mi resta solo la malloc :O
  • Re: Malloc e output

    Esamina quelle due linee in dettaglio. Cosa fanno secondo te?

    Quella printf é corretta ma va messa nella if quando trovi il numero cercato
  • Re: Malloc e output

    Bhe ho creato un puntatore in modo da poter utilizzare una malloc che riservasse in memoria i dati letti in output con lo scan.
    la memoria da salvare è definita dall'array di tipo int a[20]..
    Sono tanto fuori strada?
  • Re: Malloc e output

    Abbastanza fuori strada.

    Se il vettore esiste ed é statico

    a[N]

    come mai lo vuoi creare dinamicamente?

    E che senso la prima riga? E la malloc in quel modo?
  • Re: Malloc e output

    Scusa senza la malloc non farei che riscrivere sul vettore cancellando il valore precedentemente inserito??
    come dovrei scriverlo la malloc? la sua sintassi non è
    /* esempio pratico*/
    Per farsi dare lo spazio necessario per 5 interi
    (qualunque sia la rappresentazione usata per gli interi):
    int *p;
    p = (int*) malloc(5*sizeof(int)); ???
  • Re: Malloc e output

    Primo: ok ma tu nella malloc hai scritto correttamente? Quanti sono gli elementi che allochi?

    Secondo: a parte la malloc a che ti servono le altre righe di codice che hai usato e che ti ho evidenziato prima? A che serve il vettore statico che hai allocato con a[N] ?
  • Re: Malloc e output

    Innanzitutto non capisco nemmeno io perché devi allocare memoria quando hai già un vettore statico da usare:
    
    int i = 0;
    for(; i<N; i++) scanf("%d", &a[i]);
    
  • Re: Malloc e output

    Ora sono confuso ahahaa.
    io volevo semplicemente salvare i valori inseriti con lo scanf..
    come dovrei fare con un vettore che ha un numero preciso
    insomma se non avessi 20 numeri avrei fatto cosi
    
    int *a;
    int d;
    printf ("quanti numeri vuoi salvare?");
    scanf("%d",&d);
    a=(int*)malloc(d*sizeof(int));
    
    nel mio caso per non far sovrascrivere i numeri che funzione dovrei usare?
    una memset?
  • Re: Malloc e output

    Cosa intendi per non far sovrascrivere? Se usi un ciclo che scorre tutto l'array, dinamico o statico che sia, ogni numero andrà al suo posto senza sovrascrivere nulla.
  • Re: Malloc e output

    Quindi una malloc sarebbe inutile in questo caso?
    e allora a cosa serve la malloc in generale?
    se ora volessi stampare tutti i numeri salvati da output come dovrei fare?
  • Re: Malloc e output

    La malloc serve ad allocare memoria ogni volta che non è possibile conoscere la dimensione di uno spazio di memoria a compile time, e quindi siamo costretti a richiederla a run time.
    Nel tuo caso per l'array se sai a priori che verranno inseriti 10 numeri puoi crearlo statico, se invece è l'utente che decide la grandezza dell'array devi utilizzare la malloc a runtime.
    Dopodiché, come ho già detto, usi un ciclo for per riempire l'array e per visualizzarle i valori. Devi scorrere questo array.
  • Re: Malloc e output

    F18 ora ho capito , siete stati gentilissi.
    grazie ad entrambi
    vi devono fare santi per la tanta pazienza che avete
  • Re: Malloc e output

    Tranquillo
Devi accedere o registrarti per scrivere nel forum
14 risposte