Torna indietro   Hardware Upgrade Forum > Software > Programmazione

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
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'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-07-2004, 18:57   #1
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
[C] Ridimensionare array bidimensionale

Salve faccio questa domanda per un progetto che devo fare in C che dovrà girare sotto linux.
Poichè si tratta di un'applicazione che farà N fork (tante quante ne passerò come parametro da linea di comando) vorrei che l'array bidimensionale dichiarato dui sotto sia una variabile globale in modo tale che poi ogni processo figlio non abbia nel suo spazio di memoria un nuovo array visto che questo deve essere uguale per tutti i processi (padre e figli). Ecco l'array
Codice:
int automobili[1][2]
A questo punto vorrei ridimensionare questo array in modo tale che sia lungo N colonne ed abbia sempre due righe ciooè del tipo
Codice:
automobili[N][2]
Siccome il numero N non lo conosco a priori allora devo per forza dichiararlo come automobili[1][2] e poi ridimensionarlo in automobili[N][2]. Ho provato quindi a fare questo ridimensionamento attraverso una realloc in questo modo
Codice:
automobili=(int *) realloc (automobili, 2*N*sizeof(int));
tuttavia in fase di compilazione mi segnala l'errore
Codice:
error: incompatible types in argument
Come mai mi segnala quest'errore? A me sembra che la realloc sia fatta in modo giusto! Qualcuno mi aiuta??
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 01-07-2004, 22:42   #2
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16215
Uhm... ti sei preso una bella gatta da pelare!
Non ho mai fatto niente del genere, ma la sfida mi affascina, quindi ci metto i miei 10 centesimi.

Allora: anzitutto, hai dichiarato automobili come array e non come puntatore, quindi non puoi applicargli realloc.
D'altra parte, il tipo "matrice bidimensionale" in C non esiste, quindi devi implementarlo con i puntatori. Vediamo qualche alternativa...

Potenziale soluzione 1:
Dichiari automobili come puntatore a puntatori a int.
Quando inizializzi la prima volta, lo allochi con una (int**)malloc(nrighe*sizeof(int*)), poi per i da 0 a nrighe-1 allochi automobili[i] con una (int*)malloc(ncolonne*sizeof(int)).
L'elemento generico si chiama sempre automobili[i][j].
La riallocazione dovresti poterla fare (non lo so se funziona, però) chiamando prima realloc(automobili,new_nrighe*sizeof(int*)), e poi realloc(automobili[i],new_ncolonne*sizeof(int)) per i da 0 a new_nrighe-1.

Potenziale soluzione 2:
Ti crei una struttura dati che rappresenta matrici con un arbitrario numero di righe e colonne, con due campi int e un campo int**:
Codice:
struct matrice {
    int nrighe, ncolonne;
    int **elem;
};
più tutte le funzioni che servono a fare somme, prodotti, inizializzazioni eccetera; poi dichiari automobili come puntatore a struct matrice.
L'elemento generico si chiamerà (automobili->elem)[i][j].
La riallocazione la fai creando una nuova matrice, copiandoci dentro la vecchia come sottomatrice, cancellando la vecchia e assegnando a automobili l'indirizzo della nuova.

Fammi sapere come va.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2004, 08:08   #3
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Re: [C] Ridimensionare array bidimensionale

Quote:
Originariamente inviato da VegetaSSJ5
si tratta di un'applicazione che farà N fork....ogni processo figlio non abbia nel suo spazio di memoria un nuovo array visto che questo deve essere uguale per tutti i processi (padre e figli).
Posizioni incompatibili. E' valido solo se l'array è in una pagina di memoria di sola lettura o se usi la shared memory.

Solo i thread condividono la tabella di paginazione (quindi tutta la memoria).
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2004, 12:33   #4
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
ho usato una soluzione più spartana: ho dichiarato 2 puntatori a int
int *automobili;
int *direzione;

e li ho riallocati singolarmente con lunghezza n.

x ziosilvio:
avevo pensato anch'io a soluzioni del genere ma a me interessava proprio ridimensionare un array bidimensionale senza usare atrifici di qualsiasi tipo e poi il gioco non valeva la candela.

x ilsensine:
thanks, cmq per ora gioco solo con i processi e non con i thread, mi stanno facendo impazzire, anche perchè non c'è nessuno che me li ha spiegati decentemente. Le slide del professore fanno pena, il libro che ho appena comprato (e che sembrava interessante) fa ancora + pena... dovrò provare a leggere gapil. cmq sto facendo un progettino per laboratorio di sistemi operativi e la domanda in questo thread (in questo contesto thread è una parola ambigua ) riguardava proprio questo progetto. se avrò altri dubbi (cioè subito e molti) cercherò prima di risolverli e poi posterò qui sul forum... conto in una vostra mano!
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2004, 13:33   #5
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da VegetaSSJ5
thanks, cmq per ora gioco solo con i processi e non con i thread
Allora scordati che un processo può leggere un array modificato da un altro processo, a meno di non usare memoria condivisa o un mmap anonimo shared.

Quote:
mi stanno facendo impazzire, anche perchè non c'è nessuno che me li ha spiegati decentemente
Allergico a google?
http://www.llnl.gov/computing/tutori...eads/MAIN.html
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2004, 13:47   #6
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
insensine io ho una variabile che devono leggere sia il genitore che i figli (non che ognuno ha la propria, ma tutti devono leggere solo quella variabile). come posso fare?

Ultima modifica di VegetaSSJ5 : 02-07-2004 alle 13:57.
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2004, 13:48   #7
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Tutto dipende se dopo il fork quella variabile deve essere modificata. Se _nessuno_ la modifica dopo il fork, allora ok.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2004, 13:55   #8
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
Quote:
Originariamente inviato da ilsensine
Tutto dipende se dopo il fork quella variabile deve essere modificata. Se _nessuno_ la modifica dopo il fork, allora ok.
dopo il fork quella variabile verrà cambiata solo dal processo padre ogni volta che riceve un SIGALRM da alarm(8). MI CORREGGO posso usare memoria condivisa perchè invece c'è nel programma!
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2004, 13:57   #9
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
e allora usala, altrimenti i child non vedranno le modifiche a quella variabile...
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2004, 14:00   #10
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
Quote:
Originariamente inviato da ilsensine
e allora usala, altrimenti i child non vedranno le modifiche a quella variabile...
ehm...

http://www.di.univaq.it/~formisano/lso0304/pro5.txt
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2004, 14:06   #11
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da VegetaSSJ5
ehm...

http://www.di.univaq.it/~formisano/lso0304/pro5.txt
Si interessante, vuoi anche che te lo faccio io?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2004, 14:09   #12
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
Quote:
Originariamente inviato da ilsensine
Si interessante, vuoi anche che te lo faccio io?
la cosa non mi dispiacerebbe... cmq nooooo....... era solo per farti vedere cosa dovevo fare......















VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


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 ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
QNAPTS-h966TX, il NAS per chi fa editing...
Il trucco semplicissimo per installare W...
Apple rinvia due novità di iOS 27...
Una memoria ferroelettrica raggiunge 10 ...
Honor Magic 9, Pro Max e Super Edition: ...
24 offerte Amazon da non perdere, dalla ...
Apple starebbe progettando i propri cont...
Niente borsa per OpenAI prima del 2027: ...
Meta potrebbe aver mostrato in anticipo ...
Bicicletta elettrica L26 a 474,05€: e-bi...
NVIDIA RTX PRO 5500 Blackwell: 84 GB di ...
Sei alla ricerca di un buon gruppo di co...
Blizzard annuncia un nuovo StarCraft: la...
Ecobonus al 65%: il governo valuta il ri...
Biscotti fatti con bottiglie di plastica...
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: 11:56.


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