|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Feb 2005
Messaggi: 13
|
problema con malloc
ciao a tutti.
ho un problema che nn riesco a risolvere. sto compilando un compito che mi hanno assegnato con c++ ma quando vado ad allocare il mio nodo della coda con malloc mi da errore. riporto la funzione dove invoco malloc: void insert(CODAPTR *headptr, CODAPTR *tailptr,long dato) { CODAPTR newptr; newptr = malloc(sizeof(CODA)); /*qui mi da l'errore*/ if (newptr!=NULL){ newptr->valore=dato; newptr->nextptr=NULL; if (vuota(*headptr)) *headptr=newptr; else (*tailptr)->nextptr=newptr; *tailptr=newptr; } else printf("%ld non è stato inserito perche nn c'e' memoria disponibile.\n", dato); } l'errore che mi dice è : invalid conversion from`void*' to `CODA*' questa funzione del mio programma dovrebbe aggiungere un nodo ad una coda. come posso fare? |
|
|
|
|
|
#2 |
|
Junior Member
Iscritto dal: Feb 2005
Messaggi: 13
|
questo è il programma completo...se trovate degli errori ve ne sarò grato.
#include <cstdlib> #include <iostream> #include <stdio.h> #include <stdlib.h> struct coda{ long valore; struct coda *nextptr; }; typedef struct coda CODA; typedef CODA *CODAPTR; void insert(CODAPTR *, CODAPTR*, long); int vuota(CODAPTR); long fatt(long); void printresult(CODAPTR); main() { CODAPTR headptr=NULL, tailptr=NULL; long numero; printf("Inserisci un numero: "); scanf("\n%ld", &numero); while (numero != 0){ insert(&headptr, &tailptr, numero); printf("Inserisci un numero: "); scanf("\n%ld", &numero);} printresult(headptr); printf("scrivi un numero: "); scanf("\n%d",&numero); printf("\n\n%ld! = %ld\n\n",numero, fatt(numero)); system("PAUSE"); return EXIT_SUCCESS; } long fatt(long num) { if(num<=1) return 1; else return (num * fatt(num-1)); } void insert(CODAPTR *headptr, CODAPTR *tailptr,long dato) { CODAPTR newptr; newptr = malloc(sizeof(struct coda)); if (newptr!=NULL){ newptr->valore=dato; newptr->nextptr=NULL; if (vuota(*headptr)) *headptr=newptr; else (*tailptr)->nextptr=newptr; *tailptr=newptr; } else printf("%ld non è stato inserito perche nn c'e' memoria disponibile.\n", dato); } int vuota(CODAPTR headptr) { return headptr=NULL; } void printresult(CODAPTR currentptr) { if (currentptr == NULL) printf("non hai inserito numeri\n"); else{ while (currentptr != NULL){ printf("\n\n%ld! = %ld\n", currentptr->valore, fatt(currentptr->valore)); currentptr = currentptr->nextptr;} } } |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Re: problema con malloc
Quote:
Codice:
newptr = (CODAPTR) malloc(sizeof(CODA)); /*non dovrebbe più darti l'errore*/
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#4 |
|
Junior Member
Iscritto dal: Feb 2005
Messaggi: 13
|
peggio mi da un'altro errore che nn ho mai visto.....
mi apre un'altra cartella chiamata makefile.win e mi segnala la linea con scritto: $(BIN): $(OBJ) 25 D:\Dev-Cpp\Makefile.win [Build Error] *** target pattern contains no `%'. Stop. ma che vuol dire?????? |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Feb 2005
Messaggi: 13
|
anzi no cosi funziona!!!!!!
mi spieghi il perche nn ho capito la correzione che hai fatto!! cmq grazieeeeeeee |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Be', quello almeno indica che ha superato la fase di compilazione... quindi l'errore è risolto. Quello che leggi ora è un'errore di GNU make nell'interpretare il Makefile, forse Dev-C++ lo ha generato male, non saprei.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#7 |
|
Junior Member
Iscritto dal: Feb 2005
Messaggi: 13
|
sei un genio! mi dai ripetizioni? ancora nn riesco a capire perche aggiungendo (CODAPTR) si è risolto il problema.....
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
Be', la correzione era semplice: "malloc" restituisce un puntatore ad una zona di memoria, senza un tipo particolare di dati (per questo "void"). Essendo un tipo "vuoto", non è applicabile ad una normale variabile, contenente invece dati concreti. Perciò ti tocca forzare il compilatore ad interpretare quella zona di memoria resituita da "malloc" come contenente i dati che ti servono, in questo caso di tipo "CODA". Bye
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#10 |
|
Junior Member
Iscritto dal: Feb 2005
Messaggi: 13
|
credo di aver capito grazie ancora...stavo cercando sul libro la funzzione malloc...qui mi dice:
la funzione malloc acquisisce, come argoment, il numero di byte che dovranno essere allocati e restituisce un puntatore di tipo void * che fa riferimento all'area di memoria allocata.(e fin qui ci siamo), poi, un puntatore void * può essere asseganto a una variabile di tipo qualsiasi degli altri tipi di puntatore... esempio: newptr = malloc(sizeof(struct node)); (io nn ho capito.....a me scritto come dice lui nn funziona) grazie ancora daniele mi hai salvato la giornata stavo per spaccare tutto! |
|
|
|
|
|
#11 | ||
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
Quote:
ciao
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
||
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Quote:
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:13.



















