Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-12-2004, 10: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, 10: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, 10: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, 10: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, 11: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, 12: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, 12: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, 12: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, 12: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, 12: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 12:51.
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2004, 12: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, 13: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, 13: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, 13: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, 13: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, 13: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, 13: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, 11: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, 12: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, 12: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


Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Googlebook pronto al debutto: Google apr...
Guida all'acquisto: quale lavapavimenti ...
Google Maps su Android Auto introduce fi...
AMD Ryzen 5 5500F: fino al 16% di presta...
L'ecosistema partner di Microsoft cresce...
Oracle registra un boom nella divisione ...
Amazon Prime Video sfida TikTok con le n...
L'uscita di Rayman Legends Retold &egrav...
Dazio UE sui pacchi extra UE, in Italia ...
La nuova lavatrice smart di Xiaomi ha tr...
Hai una PSP nel cassetto? Questo nuovo p...
Oracle presenta Java 27 con diverse novi...
Il microscopio dell'EPFL vede più...
Volvo avvia la produzione dei nuovi cami...
26 offerte Amazon da non perdere, da iPh...
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:22.


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