Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2017
    Messaggi
    17

    [C] stampare un puntatore al di fuori di una funzione-

    Buonasera, volevo chiedervi un problema che non riesco a risolvere.

    int main()
    {
    int i;
    int *vet;
    prova(vet);

    for(i=0;i<2;i++)
    {
    printf("\n%d\n", vet[i]);
    }

    return 0;
    }

    void prova(int *vet)
    {
    int a=0;

    vet=malloc(sizeof(int)*2);

    vet[a]=1;
    vet[a+1]=2;

    }

    vorrei capire perchè mi da Errore di segmentazione.

    vorrei stampare il vettore senza la return.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,468
    Senza la return? Che intendi?

    Il codice è sbagliato ... dovrebbe essere

    codice:
    #include <stdlib.h>
    
    
    void prova(int **vet)
    {
    	int a = 0;
    	
    	*vet = (int *)malloc(sizeof(int) * 2);
    
    
    	(*vet)[a] = 1;
    	(*vet)[a+1] = 2;
    }
    
    
    int main()
    {
    	int i;
    	int *vet;
    	
    	prova(&vet);
    
    
    	for (i = 0; i<2; i++)
    		printf("\n%d\n", vet[i]);
    
    
    	return 0;
    }
    Ultima modifica di oregon; 27-03-2018 a 23:36
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2017
    Messaggi
    17
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Senza la return? Che intendi?

    Il codice è sbagliato ... dovrebbe essere

    codice:
    #include <stdlib.h>
    
    
    void prova(int **vet)
    {
        int a = 0;
        
        *vet = (int *)malloc(sizeof(int) * 2);
    
    
        (*vet)[a] = 1;
        (*vet)[a+1] = 2;
    }
    
    
    int main()
    {
        int i;
        int *vet;
        
        prova(&vet);
    
    
        for (i = 0; i<2; i++)
            printf("\n%d\n", vet[i]);
    
    
        return 0;
    }

    Grazie mille, mica potresti spiegarmi perchè si fa così e non come ho fatto io?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,468
    Quote Originariamente inviata da nellog Visualizza il messaggio
    Grazie mille, mica potresti spiegarmi perchè si fa così e non come ho fatto io?

    Semplicemente perché nella funzione la malloc deve modificare il valore del puntatore e per farlo ha bisogno del suo indirizzo, ovvero il puntatore deve essere passato per puntatore (doppio puntatore).

    Se passi il singolo puntatore, ne viene fatta una copia nella funzione e il suo valore viene perso all'uscita rendendo inutile il suo uso nel main.
    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.