Torna indietro   Hardware Upgrade Forum > Software > Programmazione

WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
Un mondo affollato e vivo, personaggi destinati a sparire a fine test e nessuno a inseguire l'oggetto giusto. Beta e stress test di World of Warcraft: Forever hanno fatto emergere un roleplay spontaneo, tra danze a Goldshire e code ordinate ai PNG
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
In tre giorni a Las Vegas Oracle ha presentato agenti che eseguono il lavoro, l'alleanza con OpenAI e un cloud aperto agli acceleratori di tutti. Ma i clienti europei chiedono garanzie prima ancora delle funzionalità
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-12-2004, 11:08   #1
Ir0nM4id3n84
Bannato
 
Iscritto dal: Nov 2004
Messaggi: 124
[C]Funzione che alloca dinamicamente una matrice

Ciao,
ho un problema...non mi ricordo più come ha fatto il proff a lezione per creare una funzione che mi alloca dinamicamente una matrice...

vi spiego...il programma chiede nel main il numero di righe ed il numero di colonne e li mette in 2 variabili....poi viene chiamata una funzione che mi crea una matrice con quel numero di righe e quel numero di colonne?

Qualcuno mi potrebbe dare una mano a ricostruire il tutto?

Grazie
Ir0nM4id3n84 è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 11:34   #2
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Ciao, con la premessa che io il C lo sto studiando proprio da poco, quindi potrei anche dire una fesseria....

Per l'allocazione dinamica dovresti usare la funzione malloc() che ha questo prototipo:

Codice:
void  *malloc(size_t  numero_di_byte);
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 11:48   #3
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
avrà usato malloc + calloc

~§~ Sempre E Solo Lei ~§~ ;
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 11:56   #4
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Forse intendi una roba tipo questa?

Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

unsigned int **creamatrice(unsigned int, unsigned int);

unsigned int **creamatrice(unsigned int x, unsigned int y) {
  unsigned int **matrix, count;

  matrix = calloc(x, sizeof(unsigned int *));

  for (count = 0; count < x; count++) 

    matrix[count] = calloc(y, sizeof(unsigned int));
  
  return matrix;

}
int main(int argc, char *argv[]) {

  unsigned int x, y, **matrice;
  
  if (argc == 3) {
    
    x = atoi(argv[1]);
    y = atoi(argv[2]);

    matrice = creamatrice(x, y);

  }
  else
    return 1;

  return 0;
}
Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 12:47   #5
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
con solo malloc dovrebbe essere una cosa del genere se funzionasse

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

/* elemento della matrice */
struct ProxElem{
        int elem;
        ProxElem *ProxElem;
};

/* elemento dell'array contentente gli indirizzi delle righe dell'array */
struct ProxRiga{
        ProxElem *Riga;
        ProxRiga *Prox;
};

void Allocazione_Colonne (ProxRiga *TestaRiga, int c){
	ProxElem *TestaElem, *Prec, *App;
	int i;
	if (c>0){
		TestaElem = malloc (sizeof(ProxElem));
		TestaElem->ProxElem = NULL;
	    printf ("\nInserisci elemento:\t");
		scanf ("%d", TestaElem->elem);
		TestaRiga->Riga = TestaElem;
		Prec = TestaRiga->Riga;
		for (i=1;i<c;i++){
			App = malloc (sizeof(ProxElem));
			App->ProxElem = NULL;
			printf ("\nInserisci elemento:\t");
			scanf ("%d", App->elem);
			Prec->ProxElem = App;
			Prec = App;
		}
	}
}

void Allocazione_Righe (ProxRiga *Testa, int r, int c){
	ProxRiga *App, *Precedente;
	int i;
	if (r>0){
		Testa = malloc (sizeof(ProxRiga));
		Testa->Prox = NULL;
		Allocazione_Colonne (Testa, c); 
		Precedente = Testa;
		for (i=1; i<r;i++){
			App = malloc (sizeof(ProxRiga));
			App->Prox = NULL;
			Allocazione_Colonne (App, c);
			Precedente->Prox = App;
			Precedente = App;
		}
	}
}

/* visualizzazione delle matrice */
void Visualizza (ProxRiga *TestaRiga){
	ProxElem *App;
	printf ("\nMatrice\n");
	if (TestaRiga != NULL){
		printf ("\t%d",TestaRiga->Riga->elem);
		App = TestaRiga->Riga->ProxElem;
		while (App != NULL){
			printf ("\t%d", App->elem);
			App = App->ProxElem;
		}
	}
}

/* main */
int main (){
        int Righe, Colon;
        ProxRiga *TestaRiga = NULL;
		ProxRiga *App;
		Allocazione_Righe (TestaRiga,Righe,Colon);
		App=TestaRiga;
		while (App != NULL){
			Visualizza (TestaRiga);
			App = App->Prox;
		}
		return 1;
}
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 13:11   #6
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Beh , con solo malloc dovrebbe funzionare anche così :

Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

unsigned int **creamatrice(unsigned int, unsigned int);
void printmatrix(unsigned int **, int, int);

unsigned int **creamatrice(unsigned int x, unsigned int y) {
  unsigned int **matrix, count;

  matrix = malloc(x*sizeof(unsigned int *));

  for (count = 0; count < x; count++) 

    matrix[count] = malloc(y*sizeof(unsigned int));
  
  return matrix;

}

void printmatrix(unsigned int **matrix, int x, int y) {
  
  int a,b;
  for (b=0; b<y; b++) {
    for (a=0; a<x; a++) {
      printf("%4u ", matrix[a][b]);
      if ( a == x-1 )
	putchar('\n');
    }
  }

  putchar('\n');
  putchar('\n');
}


int main(int argc, char *argv[]) {

  unsigned int x, y, **matrice;
  
  if (argc == 3) {
    
    x = atoi(argv[1]);
    y = atoi(argv[2]);

    matrice = creamatrice(x, y);
    
    printmatrix(matrice, x, y);
  }
  else
    return 1;

  return 0;
}
Ci ho anche messo una funzione che printa i valori della matrice dopo averla creata.

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 13:29   #7
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
Anonimo che cavolo sbaglio nel program?

~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 13:38   #8
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Ero andato a magnare .

Perchè, il tuo prog non va? Non l'ho ancora provato , ma non crea la matrice o non si compila?

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 13:41   #9
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
non si compila

~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 13:44   #10
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Quote:
Originariamente inviato da Fenomeno85
non si compila

~§~ Sempre E Solo Lei ~§~

Hai dimenticato "struct" davanti alla dichiarazione di tutte le strutture .

Se aspetti un attimo provo a correggertelo e poi te lo riposto

Ciao
__________________
GPU Compiler Engineer

Ultima modifica di AnonimoVeneziano : 05-12-2004 alle 13:51.
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 13:50   #11
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Ecco la versione corretta
Codice:
#include <stdio.h>
#include <stdlib.h>

/* elemento della matrice */
struct ProxElem{
        int elem;
        struct ProxElem *ProxElem;
};

/* elemento dell'array contentente gli indirizzi delle righe dell'array */
struct ProxRiga{
        struct ProxElem *Riga;
        struct ProxRiga *Prox;
};

void Allocazione_Colonne (struct ProxRiga *TestaRiga, int c){
	struct ProxElem *TestaElem, *Prec, *App;
	int i;
	if (c>0){
		TestaElem = malloc (sizeof(struct ProxElem));
		TestaElem->ProxElem = NULL;
	    printf ("\nInserisci elemento:\t");
		scanf ("%d", TestaElem->elem);
		TestaRiga->Riga = TestaElem;
		Prec = TestaRiga->Riga;
		for (i=1;i<c;i++){
			App = malloc (sizeof(struct ProxElem));
			App->ProxElem = NULL;
			printf ("\nInserisci elemento:\t");
			scanf ("%d", App->elem);
			Prec->ProxElem = App;
			Prec = App;
		}
	}
}

void Allocazione_Righe (struct ProxRiga *Testa, int r, int c){
	struct ProxRiga *App, *Precedente;
	int i;
	if (r>0){
		Testa = malloc (sizeof(struct ProxRiga));
		Testa->Prox = NULL;
		Allocazione_Colonne (Testa, c); 
		Precedente = Testa;
		for (i=1; i<r;i++){
			App = malloc (sizeof(struct ProxRiga));
			App->Prox = NULL;
			Allocazione_Colonne (App, c);
			Precedente->Prox = App;
			Precedente = App;
		}
	}
}

/* visualizzazione delle matrice */
void Visualizza (struct ProxRiga *TestaRiga){
	struct ProxElem *App;
	printf ("\nMatrice\n");
	if (TestaRiga != NULL){
		printf ("\t%d",TestaRiga->Riga->elem);
		App = TestaRiga->Riga->ProxElem;
		while (App != NULL){
			printf ("\t%d", App->elem);
			App = App->ProxElem;
		}
	}
}

/* main */
int main (){
        int Righe, Colon;
        struct ProxRiga *TestaRiga = NULL;
		struct ProxRiga *App;
		Allocazione_Righe (TestaRiga,Righe,Colon);
		App=TestaRiga;
		while (App != NULL){
			Visualizza (TestaRiga);
			App = App->Prox;
		}
		return 1;
}
Ti faccio solo una domanda: Come fai a prendere in input le righe e le colonne della matrice?

Non vedo nessuna parte del programma dedicata a quello

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 14:01   #12
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
Quote:
Originariamente inviato da AnonimoVeneziano
Ecco la versione corretta
Codice:
#include <stdio.h>
#include <stdlib.h>

/* elemento della matrice */
struct ProxElem{
        int elem;
        struct ProxElem *ProxElem;
};

/* elemento dell'array contentente gli indirizzi delle righe dell'array */
struct ProxRiga{
        struct ProxElem *Riga;
        struct ProxRiga *Prox;
};

void Allocazione_Colonne (struct ProxRiga *TestaRiga, int c){
	struct ProxElem *TestaElem, *Prec, *App;
	int i;
	if (c>0){
		TestaElem = malloc (sizeof(struct ProxElem));
		TestaElem->ProxElem = NULL;
	    printf ("\nInserisci elemento:\t");
		scanf ("%d", TestaElem->elem);
		TestaRiga->Riga = TestaElem;
		Prec = TestaRiga->Riga;
		for (i=1;i<c;i++){
			App = malloc (sizeof(struct ProxElem));
			App->ProxElem = NULL;
			printf ("\nInserisci elemento:\t");
			scanf ("%d", App->elem);
			Prec->ProxElem = App;
			Prec = App;
		}
	}
}

void Allocazione_Righe (struct ProxRiga *Testa, int r, int c){
	struct ProxRiga *App, *Precedente;
	int i;
	if (r>0){
		Testa = malloc (sizeof(struct ProxRiga));
		Testa->Prox = NULL;
		Allocazione_Colonne (Testa, c); 
		Precedente = Testa;
		for (i=1; i<r;i++){
			App = malloc (sizeof(struct ProxRiga));
			App->Prox = NULL;
			Allocazione_Colonne (App, c);
			Precedente->Prox = App;
			Precedente = App;
		}
	}
}

/* visualizzazione delle matrice */
void Visualizza (struct ProxRiga *TestaRiga){
	struct ProxElem *App;
	printf ("\nMatrice\n");
	if (TestaRiga != NULL){
		printf ("\t%d",TestaRiga->Riga->elem);
		App = TestaRiga->Riga->ProxElem;
		while (App != NULL){
			printf ("\t%d", App->elem);
			App = App->ProxElem;
		}
	}
}

/* main */
int main (){
        int Righe, Colon;
        struct ProxRiga *TestaRiga = NULL;
		struct ProxRiga *App;
		Allocazione_Righe (TestaRiga,Righe,Colon);
		App=TestaRiga;
		while (App != NULL){
			Visualizza (TestaRiga);
			App = App->Prox;
		}
		return 1;
}
Ti faccio solo una domanda: Come fai a prendere in input le righe e le colonne della matrice?

Non vedo nessuna parte del programma dedicata a quello

Ciao
dimenticate

~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 14:06   #13
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
scusa ma a te te lo compila?

a me no

Compiling...
lista.cpp
lista.cpp: In function `void Allocazione_Colonne(ProxRiga*, int)':
lista.cpp:20: error: invalid conversion from `void*' to `ProxElem*'
lista.cpp:27: error: invalid conversion from `void*' to `ProxElem*'
lista.cpp: In function `void Allocazione_Righe(ProxRiga*, int, int)':
lista.cpp:41: error: invalid conversion from `void*' to `ProxRiga*'
lista.cpp:46: error: invalid conversion from `void*' to `ProxRiga*'

ma sono obbligatori ridifinire le struct io non le avevo mai messe almeno mi ricordo così

~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 14:16   #14
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
melchior@melchior:~/Cprograms$ gcc -g fenom.c -o fenom
melchior@melchior:~/Cprograms$

Si a me lo compila .

In C devi sempre mettere "struct" davanti alle dichiarazione , non so in C++ , a meno di aver definito un tipo con TypeDef , a quel punto puoi usare il nome del tipo .

Comunque il tuo programma ha altri problemi oltre a quello , come ad esempio quello che la funzione "Allocazione_Righe" non fa ritornare alcun valore lasciando TestaRiga sempre NULL nella "main" , e non soddisfando mai la condizione "while ( App != NULL ) " . In questo modo perdi il puntatore alla struttura una volta uscito dalla funzione.


Inoltre mi sembra ci siano altri problemi, riguardatelo bene

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 14:22   #15
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
Quote:
Originariamente inviato da AnonimoVeneziano
melchior@melchior:~/Cprograms$ gcc -g fenom.c -o fenom
melchior@melchior:~/Cprograms$

Si a me lo compila .

In C devi sempre mettere "struct" davanti alle dichiarazione , non so in C++ , a meno di aver definito un tipo con TypeDef , a quel punto puoi usare il nome del tipo .

Comunque il tuo programma ha altri problemi oltre a quello , come ad esempio quello che la funzione "Allocazione_Righe" non fa ritornare alcun valore lasciando TestaRiga sempre NULL nella "main" , e non soddisfando mai la condizione "while ( App != NULL ) " . In questo modo perdi il puntatore alla struttura una volta uscito dalla funzione.


Inoltre mi sembra ci siano altri problemi, riguardatelo bene

Ciao
io in Allocazione_Righe modifico la testa direttamente infatti è un passaggio per indirizzo quindi si modifica.
Mi piacerebbe riuscire a compilare ma MinGW non me lo compila.

~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 14:30   #16
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Quote:
Originariamente inviato da Fenomeno85
io in Allocazione_Righe modifico la testa direttamente infatti è un passaggio per indirizzo quindi si modifica.
Mi piacerebbe riuscire a compilare ma MinGW non me lo compila.

~§~ Sempre E Solo Lei ~§~

Non passi alla funzione una struttura, ma un PUNTATORE a struttura che è esattamente identico ad una variabile qualsiasi, perciò anch'esso è passato per valore .

Quindi TestaRiga (che è una qualsiasi variabile) viene copiata e passata alla funzione che la modifica e poi all' uscita la cancella .

Inoltre anche le strutture vengono passate per definizione per valore e non per riferimento , quindi in ogni caso avresti comunque sbagliato

Ciao

PS= Non so perchè non ti si compili su MiniGW . Hai provato a compilare la mia correzione?
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 14:39   #17
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
Quote:
Originariamente inviato da AnonimoVeneziano
Non passi alla funzione una struttura, ma un PUNTATORE a struttura che è esattamente identico ad una variabile qualsiasi, perciò anch'esso è passato per valore .

Quindi TestaRiga (che è una qualsiasi variabile) viene copiata e passata alla funzione che la modifica e poi all' uscita la cancella .

Inoltre anche le strutture vengono passate per definizione per valore e non per riferimento , quindi in ogni caso avresti comunque sbagliato

Ciao

PS= Non so perchè non ti si compili su MiniGW . Hai provato a compilare la mia correzione?
bho aspe che sto installando visual studio ... cmq forse ho capito quello che dici ma cmq dovrei riuscirci a lavorare su quei dati dato che sono nella zona heap ... però mi sa che così ho qualche problemino.

~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 06-12-2004, 12:16   #18
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
caiser ... l'ho rifatto e cavolo perdo tutto, eppure io mi ricordavo che doveva funzionare, con le classi avevo sempre fatto così

~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 06-12-2004, 13:35   #19
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
premesso che io a scuola avevo studiato le liste solo con le classi .. ho provato a vedere e infatti funziona con le classi

ma allora senza ste classi come faccio a non perdere i valori volendo utilizzare le funzioni?

Codice:
/* lista con classe */

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

struct dati {
	int valore;
};

struct nodo {
	dati val;
	nodo *succ;
};

class lista{
private:
	nodo *testa;
public:
	void visualizza();
	void carica (dati valori);
	lista();
	~lista();
};

/* distruttore */
lista::~lista(){
	nodo *supp;
	supp = new(nodo);
	if (testa == NULL){
		printf ("\nLa lista e' vuota. Nessun elemento cancellato.\n\n\n");
	}
	else {
		while (testa != NULL){
			supp = testa;
			testa = testa->succ;
			delete(supp);
		}
		printf ("\nTutta la lista e' stata deallocata.\n\n");
	}
	system ("PAUSE");
}
			
/* inserimento sempre in testa */
void lista::carica(dati valori){
	nodo *supp;
	supp = new (nodo);
	supp->val = valori;
	supp->succ = testa;
	testa = supp;
}

void lista::visualizza(){
	nodo *supp;
	supp = testa;
	while (supp!=NULL){
		printf ("%d", supp->val.valore);
		supp= supp->succ;
	}
}

/* costruttore */
lista::lista(){
	testa = NULL;
}

int main (){
	dati valori;
	lista list;
	printf ("\nInserisci il valore:\t");
	scanf ("%d",&valori.valore);
	list.carica(valori);
	list.visualizza ();
	return 1;
}
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 06-12-2004, 13:52   #20
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Comunque si parlava di C , non di C++

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
Il razzo spaziale New Glenn di Blue Orig...
La Cina si prepara al primo lancio orbit...
Sale LAN, la Manovra 2027 introduce una ...
11 prezzi imperdibili in Amazon: non sol...
Giù i prezzi di Xiaomi 17T e Xiao...
Una tassa di 5,5 centesimi su ogni gigab...
Vuoi clonare un videogioco con l'IA? Cla...
Furto da 6,3 miliardi di dollari, Binanc...
Gli USA dipendono dai robot stranieri: T...
Volkswagen non ha più soldi per l...
Telescopio spaziale Hubble: la NASA cerc...
Più sottile e potente: le nuove i...
Il JPL estende la vita operativa della s...
DAZN Full è in offerta: tutta la ...
GTA 6 su PC potrebbe arrivare prima del ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:24.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v