Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    78

    errore funzione malloc linguaggio c

    Salve mi sta da poco cimentando con l'allocazione dinamica,questo è un semplice programmino che mi da il seguente errore.Perche'?

    malloc((((unsigned int)dim) * 4u))' cannot be used as a function

    codice:
    #include<stdio.h>
    #include<assert.h>
    #include<string.h>
    #include<stdlib.h>
    #define DIM 100
    int main()
    {
        int *array;
        int dim,i;
        
        printf("Inserisci la dimensione");
        scanf("%d",&dim);
        
        array=malloc(dim*sizeof(int))
        
        
        assert(array!=NULL);/*qui mi da errore*/
        printf("Inserisci elemento");
        for(i=0;i<dim;i++)
        
        scanf("%d",&array[i]);
        printf("Elementi allocati\n\n");
        printf("posizione%d\tindirizzo di memoria:%d\tvalore:%d\n",i,&array[i],array[i];

    se avessi usato
    codice:
    if((array!=NULL)
    invece di
    codice:
    assert(array!=NULL);
    andava bene cmq?Perchè ci ho provato e mi da un altro errore: invalid conversion from `void*' to `int*'?
    Ultima modifica di SSSS90; 16-04-2014 a 12:11

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213
    Dando una prima occhiata veloce, mi viene da dirti che hai mancato il ; a

    codice:
    array=malloc(dim*sizeof(int))

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    78
    ho provato così:
    codice:
     array=(int*)malloc(dim*sizeof(int));
    e l'errore si toglie..ma il programma non funziona il risultato e':
    3 7 6 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.....

    invece dovrebbe chiedermi la dimensione e stamparmi solo 3 7 6 9...qualche suggerimento?
    Ultima modifica di SSSS90; 16-04-2014 a 14:10

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Ma il risultato che hai lo ottieni con il codice mostrato? No, perché la for include solo la scanf ... la printf visualizza altro ...

    Mostra il codice che effettivamente utilizzi.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    78

    malloc linguaggio c

    Questo codice sembra funzionare.Ma ho dovuto modificare la seguente riga:
    codice:
    array1=malloc(dim*sizeof(int));
    in:
    codice:
    array1=(int*)malloc(dim*sizeof(int));
    altrimenti mi da come errore:
    invalid conversion from `void*' to `int*'.Mi sono fatto una mia idea personale,ma mi farebbe piacere confrontarmi con un esperto:


    il codice:
    codice:
    array1=malloc(dim*sizeof(int));
    mi da errore perchè è valido se si utilizza il linguaggio c e si utilizza un compilatore che lo supporta,io invece uso devc++ quindi devo aggiungere
    (int *)....sto dicendo una ca***ata?

    codice:
    #include<stdio.h>
    #include<assert.h>
    #include<string.h>
    #include<stdlib.h>
    #define DIM 100
    #include<malloc.h>
    
    int main()
    {
        int *array1;
        int dim,i;
        
        printf("Inserisci la dimensione:");
        scanf("%d",&dim);
        
        array1=(int*)malloc(dim*sizeof(int));
     
        
        if(array1!=NULL)
        {
          
          for(i=0;i<dim;i++)
          {
              printf("Inserisci elemento:");
              scanf("%d",&array1[i]);
          }
          
              printf("Elementi allocati\n\n");
              printf("posizione\tindirizzo di memoria \tvalore\n");
              
              for(i=0;i<dim;i++)
              printf("%d\t\t%d\t\t\t%d\n",i,&array1[i],array1[i]);
              
        }
        
     
        else
        
        printf("Errore");
                      
         
        free(array1);
        system("pause");
    }

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Ma la questione è solamente del cast della malloc o la visualizzazione dei dati?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213
    E' assolutamente una cosa che devi fare invece altro che errato...

    La malloc restituisce un puntantore a void, è necessario quindi castarlo a int (nel tuo caso) per un uso corretto

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    78
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Ma la questione è solamente del cast della malloc o la visualizzazione dei dati?
    no il problema della visualizzazione l'ho risolto da solo...e ho postato il codice già corretto..ma per la malloc ...se uso il codice seguente:

    codice:
     array1=malloc(dim*sizeof(int));
    omettendo *int prima di malloc mi da errore..

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    78
    ma solo se uso un compilatore devc++ come dici tu"è necessario quindi castarlo a int ",se era linguaggio c potevo omettere int*?

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213
    Ma il tuo è un programma in C...
    Mi sa che hai un pò di confusione in testa...
    Comunque è proprio l'utilizzo di malloc che richiede il cast al tipo che deve ospitare la memoria, non è che puoi ometterlo...

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.