Telefonino.net network
 
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. NEI PREFERITI .:: | RSS Forum | RSS News | NEWS web | NEWS software |
| PUBBLICITA' | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | CERCA nel FORUM » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 30-06-2004, 10.28.53   #46
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
Inoltre:

IMPORTANTE

Il tipo dati va sempre istanziato e poi va creato il puntatore all'istanza.. non prima a meno che tu non decida di allocare la memoria per il puntatore manulamente...

Se scrivi:
t_Mossa p;

il compilatore alloca già la memoria per un char e un int che sono i campi del tipo struturato.

Se scrivi:
t_Mossa *p;

crei un puntatore a struttura, ma nessuno pensa ad allocare la memoria per te.. a meno che tu non lo faccia manualmente con 'malloc', ma devi stare poi attento a liberarla e la devi saper gestire ... in questo caso, se la memoria non è allocata, il puntatore potrebbe fare riferimento a qualsiasi cosa....

Bye
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 30-06-2004, 10.36.28   #47
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
Quota:
Alhazred ha scritto:

Con questa dovrei avere un puntatore di tipo t_Mossa che punta all'inizio della memoria condivisa.
Quasi ...
In realtà c'é sempre la questione dei tipi in ritorno...

Queste funzioni ritornano un LPVOID (void *) che punta direttamente alla regione di memoria condivisa, per poterla utilizzare devi prima passare da un dato di quel tipo e poi "scaricarla" sul puntatore a struttura oppure direttamente sulla struttura.

LPVOID Regione;
Regione = MapViewOfFile(...);

Bye
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 30-06-2004, 11.41.12   #48
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Quota:
Originariamente inviato da P8257 WebMaster

...
p -> Colonna = 'a';
p -> Riga = 1;
...
Bye
Ho fatto in questo modo e non ci sono più gli warning
Il fatto è che mi stavo attenendo ad esempi visti a lezione dove veniva usato strncpy, pensavo fosse l'unico modo per gestire situazioni simili.
Alhazred non è collegato   Rispondi citando
Vecchio 30-06-2004, 11.45.20   #49
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Quota:
Originariamente inviato da LoryOne
Tranquillo, non ti sto dicendo che stai sbagliando.
Ora ti prego di dirmi cosa riscontri in questi due programmini:
...
Nel primo p è un puntatore ad un area di memoria e per accedere ai vari campi si usa ->, il 97 dovrebbe venir gestito come una stringa.

Nel secondo p è il nome di una variabile strutturata e posso accedere ai suoi campi con ., stessa storia per il 97.

E' questo che dovevo dirti? Ho detto qualcosa di sbagliato?
Alhazred non è collegato   Rispondi citando
Vecchio 30-06-2004, 11.46.45   #50
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Quota:
Originariamente inviato da P8257 WebMaster

...
Se scrivi:
t_Mossa *p;

crei un puntatore a struttura, ma nessuno pensa ad allocare la memoria per te.. a meno che tu non lo faccia manualmente con 'malloc', ma devi stare poi attento a liberarla e la devi saper gestire ... in questo caso, se la memoria non è allocata, il puntatore potrebbe fare riferimento a qualsiasi cosa....

Bye
L'allocazione di memoria avevo intenzione di farla nel main.
Alhazred non è collegato   Rispondi citando
Vecchio 30-06-2004, 11.54.18   #51
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
Quota:
Alhazred ha scritto:

L'allocazione di memoria avevo intenzione di farla nel main.
Bene,
ma stai molto attento.. soprattutto a liberarla quando non ti serve .. nel tuo caso a maggior ragione .. dato che hai due processi attivi che la usano ..

Bye
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 30-06-2004, 12.01.50   #52
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.502
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Quota:
Originariamente inviato da Alhazred

Nel primo p è un puntatore ad un area di memoria e per accedere ai vari campi si usa ->, il 97 dovrebbe venir gestito come una stringa.

Nel secondo p è il nome di una variabile strutturata e posso accedere ai suoi campi con ., stessa storia per il 97.

E' questo che dovevo dirti? Ho detto qualcosa di sbagliato?
Nulla di sbagliato, il Web ti ha messo in guardia sull'allocazione di memoria. Se avessi compilato i due programmini, il secondo non ti avrebbe dato problemi, mentre il primo sarebbe esploso.
LoryOne non è collegato   Rispondi citando
Vecchio 30-06-2004, 13.37.44   #53
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Ora sono nel main, dopo aver dichiarato HANDLE mapping;
devo allocare la memoria condivisa con CreateFileMapping e lo sto facendo in questo modo:

CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 0, shared_mem);

La memoria condivisa dovrà contenere al più una mossa che verrà di volta in volta sovrascritta dal processo di chi la effettua, quindi ho messo sia dwMaximumSizeHigh che dwMaximumSizeLow = 0, è corretto?
Alhazred non è collegato   Rispondi citando
Vecchio 30-06-2004, 13.43.45   #54
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
Oh bene..
Con piacere ti comunico che secondo me sei sulla strada giusta.. se tieni l'impostazione a zero dei due parametri, ricordati di controllare sempre la dimensione del file o del segmento di memoria che tenti di allocare, se tenti di allocare zero byte devi aspettarti un errore.

Bye
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 30-06-2004, 17.40.30   #55
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Con il caldo di oggi mi si sta fondendo il cervello e invece di pensare ad allocazioni di memoria, indirizzi e puntatori ho deciso di scrivere un pezzo di codice più leggero.
In pratica sto preparando la grafica del campo di battaglia, è una semplice matrice 10x10 di caratteri.
Il problema è questo, per provare il layout del campo senza starci troppo a pensare avevo usato una matrice di interi e sono riuscito a farla decentemente, ora mi è venuto in mente che dovranno comparire dei caratteri invece che dei numeri nella griglia, così ho trasformato la matrice di interi in una di caratteri ma... "Questo programma ha eseguito un'operazione non valida e sarà terminato"
In pratica accade appena deve iniziare il secondo ciclo for.
Ecco il codice:
Codice:
#include <stdio.h>

char cArray[10][10];
int i, j;

int main(void){
	printf("%s"," ");
	for(i=1; i<11; i++)
		for(j=1; j<11; j++)
			cArray[i][j] = ' ';
	printf("%s","    A   B   C   D   E   F   G   H   I   J");
	printf("%s","\n  ------------------------------------------");
		
	for(i=1; i<10; i++) {
		printf("\n    ");
		for(j=1; j<11; j++){
			printf(" %s",cArray[i][j]);
			printf("%s"," |");
		}
		printf("%s","\n  ------------------------------------------");
	}
	printf("\n    ");
	for(i=10; i<11; i++)
		for(j=1; j<11; j++){
			printf(" %s",cArray[i][j]);
			printf("%s"," |");
		}
	printf("\n");
}
Non credo che l'errore sia la dichiarazione della matrice altrimenti l'errore l'avrei avuto in compilazione, giusto? Allora dov'è lo sbaglio?

Ultima modifica di Alhazred : 30-06-2004 alle ore 18.05.29
Alhazred non è collegato   Rispondi citando
Vecchio 30-06-2004, 19.20.51   #56
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.502
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Una stringa è si un'array di caratteri ma quando li stampi lo fai singolarmente.
Va bene printf ma non va bene "%s".
Se usi "%c" le cose cambiano.

printf è obsoleto ma se vuoi proprio usare C e non C++...
LoryOne non è collegato   Rispondi citando
Vecchio 30-06-2004, 19.23.22   #57
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.502
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Codice:
for(i=1; i<11; i++)
		for(j=1; j<11; j++)
			cArray[i][j] = ' ';
E' un array bidimensionale ma entrambe le dimensioni sono pari a 10.
Perchè l'utilizzo di due variabili ?
Ne basta 1.
LoryOne non è collegato   Rispondi citando
Vecchio 30-06-2004, 19.29.11   #58
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.502
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Tropo bello lavorare sui Pentium 4 o sugli Athlon XP.
Dovreste lavorare sui Zilog 80

Scheeerzo, comunque ottimizzazione utilizzo di risorse minimo.
Due regole da adottare SEMPRE !!!!

Alh, tieni sottomano quello che trovi qui:
http://www.cppreference.com/index.html
LoryOne non è collegato   Rispondi citando
Vecchio 30-06-2004, 19.47.10   #59
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Quota:
Originariamente inviato da LoryOne
Codice:
for(i=1; i<11; i++)
		for(j=1; j<11; j++)
			cArray[i][j] = ' ';
E' un array bidimensionale ma entrambe le dimensioni sono pari a 10.
Perchè l'utilizzo di due variabili ?
Ne basta 1.
Uso 2 variabili perché quando verrà fatta una mossa seguirà un codice di questo tipo:

i = colonna;
j = righa;
verificaCasella(cArray[i][j]);

e in generale non è vero che i e j saranno uguali.
Alhazred non è collegato   Rispondi citando
Vecchio 30-06-2004, 19.49.02   #60
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Quota:
Originariamente inviato da LoryOne
...
printf è obsoleto ma se vuoi proprio usare C e non C++...
Non ho scelta, devo usare il C.
Alhazred non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
La grande battaglia dei super eroi! Sbavi Chiacchiere in libertà 83 27-02-2009 11.43.39
battaglia navale in c# Joy&Lu Programmazione 3 01-09-2008 16.08.58
Il Signore degli Anelli - La Battaglia per la terra di mezzo Darth Maul Masterizzazione Giochi Games 0 01-09-2006 19.16.18
[C] Battaglia Navale (versione client server) in Linux Nanri Programmazione 11 06-08-2005 15.50.27

Orario GMT +2. Ora sono le: 00.53.22.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.