Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Problema liste...
Forum - C/C++ - Problema liste...

Avatar
Lello90 (Normal User)
Newbie


Messaggi: 15
Iscritto: 13/01/2010

Segnala al moderatore
Postato alle 10:45
Mercoledì, 13/01/2010
Ciao ragazzi, sono un programmatore di C alle primissime armi... sto iniziando ad esercitarmi con le liste... ho un piccolo problema:
il dev c++ non mi compila questo semplicissimo codice e non capisco cosa ci sia di sbagliato:



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



struct el{
       int info;
       struct el *next;
       };
      
       typedef struct el ElementoLista;
       typedef ElementoLista *ListaDiElementi;
      
      
int main(){

ListaDiElementi l;
l=malloc(sizeof(ListaDiElementi));


}






mi da' questo errore

invalid conversion from `void*' to `ElementoLista*'


oltretutto anche col gcc di ubuntu non riesco a compilare un programma pressochè analogo... chiedo il vostro aiuto, mi serve per l'università. Grazie mille...

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 10:51
Mercoledì, 13/01/2010
Forse volevi scrivere

Codice sorgente - presumibilmente Plain Text

  1. l=(ListaDiElementi)malloc(sizeof(ElementoLista));




Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 11:33
Mercoledì, 13/01/2010
esattamente come dice nessuno, la malloc ritorna come valore un puntatore alla memoria void(quindi di nessun tipo per farla breve). Devi effettuare perciò un cast al tipo che desideri, nel tuo caso ListaDiElementi.

Come grandezza tu sbagli a dire sizeof(ListaDiElementi) perché così passi alla malloc la grandezza di un puntatore che non è la grandezza che tu vuoi per la struttura; devi quindi passare sizeof(ElementoLista) che rappresenta l'intera struttura che vuoi ricreare in memoria.


PM Quote
Avatar
Lello90 (Normal User)
Newbie


Messaggi: 15
Iscritto: 13/01/2010

Segnala al moderatore
Postato alle 11:44
Mercoledì, 13/01/2010
Ho capito, cioè io pensavo che per il puntatore al primo elemento della lista si dovesse allocare sizeof ListaDiElementi invece va considerato come tutti gli altri record della lista... scusate i miei problemi cognitivi, ma non ho capito di preciso cosa vuol dire effettuare un cast...
Vi ringrazio ancora per la rapidità e precisione delle risposte e mi scuso per la mia ignoranza in materia...

p.s. Il codice era pari pari quello che avevamo scritto alla lavagna con il docente del corso di programmazione... possibile che fosse così errato?

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:20
Mercoledì, 13/01/2010
Il cast esegue la proiezione di un tipo su un altro. In questo caso ti serve non puntatore a "nessun tipo in particolare" (ossia void), ma un ben preciso ListaDiElementi, perciò devi trasferire il valore del puntatore cambiandone tipo.

Il cast non è una conversione, ma un semplice passaggio da un tipo ad un altro. La conversione implica un'elaborazione (ad esempio da stringa ad intero).

PM Quote