Oppure

Loading
13/01/10 9:45
Lello90
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...
aaa
13/01/10 9:51
nessuno
Forse volevi scrivere

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à.
13/01/10 10:33
lorenzo
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.

aaa
13/01/10 10:44
Lello90
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?
aaa
13/01/10 16:20
Il Totem
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).
aaa