|
| 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 » | |
![]() |
#46 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
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 ![]() |
![]() |
![]() |
![]() |
#47 | |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
Quota:
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 ![]() |
|
![]() |
![]() |
![]() |
#48 | |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Quota:
![]() Il fatto è che mi stavo attenendo ad esempi visti a lezione dove veniva usato strncpy, pensavo fosse l'unico modo per gestire situazioni simili. |
|
![]() |
![]() |
![]() |
#49 | |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Quota:
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? |
|
![]() |
![]() |
![]() |
#50 | |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Quota:
|
|
![]() |
![]() |
![]() |
#51 | |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
Quota:
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 ![]() |
|
![]() |
![]() |
![]() |
#52 | |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
![]() ![]() ![]() |
Quota:
![]() |
|
![]() |
![]() |
![]() |
#53 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
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? |
![]() |
![]() |
![]() |
#54 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
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 ![]() |
![]() |
![]() |
![]() |
#55 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
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"); } Ultima modifica di Alhazred : 30-06-2004 alle ore 18.05.29 |
![]() |
![]() |
![]() |
#56 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
![]() ![]() ![]() |
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++... |
![]() |
![]() |
![]() |
#57 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
![]() ![]() ![]() |
Codice:
for(i=1; i<11; i++) for(j=1; j<11; j++) cArray[i][j] = ' '; Perchè l'utilizzo di due variabili ? Ne basta 1. |
![]() |
![]() |
![]() |
#58 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
![]() ![]() ![]() |
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 ![]() |
![]() |
![]() |
![]() |
#59 | |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Quota:
i = colonna; j = righa; verificaCasella(cArray[i][j]); e in generale non è vero che i e j saranno uguali. |
|
![]() |
![]() |
![]() |
#60 | |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Quota:
|
|
![]() |
![]() |
![]() |
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
Strumenti discussione | |
|
|
![]() |
||||
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 |