Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    168

    [C] aiuto! errore malloc

    salve sono nuovo ho un problema... sto facendo un programma in c


    riscontro il problema su questa stringa:

    if(!(pNewAddr = malloc(sizeof(*pNewAddr))))


    il compilatore dev-c++ mi dice che trova un errore di conversione dalla funzione al dato enumerato.

    se compilo il file in .cpp trovo questo errore.

    se invece lo compilo in .c l'errore non c'è e il programma funziona...

    qualcuno mi ha detto che si tratta del baco di malloc...io avrei bisogno di compilarlo in .cpp

    aiutatemi vi prego sono disperato. grazie

  2. #2
    malloc() ritorna un puntatore a void, probabilmente devi aggiungere un cast.
    Di che tipo è pNewAddr?
    “Guardo in alto mentre cammino, così le lacrime non scenderanno...”
    Kyu Sakamoto

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    168
    pNewAddr è refierita a un dato enumerato.

    cmq ho provato a sostituire la stringa che non funzionava con questa:

    if(!(pNewAddr = new tag_address [(sizeof(*pNewAddr))]))

    non so se sia sintatticamente corretta, ma adesso funziona

  4. #4

    Re: [C] aiuto! errore malloc

    [QUOTE]Originariamente inviato da miscialo
    if(!(pNewAddr = malloc(sizeof(*pNewAddr))))
    [/code]
    Devi aggiungere un cast:
    codice:
    pNewAddr = (tag_address) malloc(sizeof(tag_address));
    (uso sizeof(tag_address) al posto di sizeof(*pNewAddr) perché così riesce più chiaro cosa si sta allocando)
    o, usando l'operatore new (che non si usa in quella maniera che hai scritto , in quel modo allochi un array di tag_address con numero di elementi pari alla dimensione in bytes di tag_address )
    codice:
    pNewAddr = new tag_address;
    .
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    168
    la prima soluzione che mi hai dato non va...se metto solo
    pNewAddr = new tag_address;

    funziona tranquillamente...

  6. #6
    Originariamente inviato da miscialo
    la prima soluzione che mi hai dato non va...
    Che errore ti dà?
    se metto solo
    pNewAddr = new tag_address;

    funziona tranquillamente...
    Occhio: questo è C++, non C.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    168
    il primo errore è:no matching function for call to `tag_address::tag_address(void*)'
    con nota: candidates are: tag_address::tag_address()

    secondo errore: tag_address::tag_address(const tag_address&)

    cmq io devo compilare in .cpp quindi mi conviene usare new invece che malloc

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Sembra che tag_address sia una classe e che ti venga indicato che, oltre al normale costruttore, non ci sia un costruttore che accetta quell'argomento ...

    A me sembra che ci sia molta confusione e che dovresti mostrare la parte della definizione di tag_address (che dovrebbe stare nel file .h) per capirci qualcosa ...

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    168
    cmq con malloc non potrei compilarlo in .cpp ...
    lo lascio stare con la new... tanto funziona bene...

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Con il malloc puoi compilare con C e con C++, ci mancherebbe.

    Comunque, fa un po' come vuoi.

    E' singolare che uno cerca aiuto in un forum e poi non lo vuole quando lo ottiene.
    Io sospetto che stai sbagliando qualcosa ma, contento tu ...

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.