Torna indietro   Hardware Upgrade Forum > Software > Programmazione

 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco
Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco
MiniLED di fascia media con local dimming a 192 zone, 144 Hz nativi e audio firmato Devialet. La prova strumentale riscontra colori affidabili e gaming reattivo, per un prodotto molto accessibile e convincente. Ma la soundbar aggiuntiva è quasi d'obbligo
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto
Amazon porta i colori sul suo Kindle da scrittura più grande: schermo Colorsoft a 11 pollici, processore quad-core, penna premium più reattiva e strumenti IA per le note, sono le note salienti. Il salto di prezzo rispetto al modello in bianco e nero si fa sentire, anche se la percezione è quella di trovarsi di fronte a un prodotto di fascia altissima, per veri appassionati
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
Abbiamo intervistato Sumit Dhawan, CEO di Proofpoint, per capire come stia cambiando il mondo della sicurezza con l'avvento dell'intelligenza artificiale e con il ritmo sempre più serrato a cui vengono trovate vulnerabilità nel software. Un problema significativo, che richiederà del tempo per essere risolto (o quantomeno arginato)
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: 16214
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


 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco Hisense 55U7SE: tuttofare e accessibile, il Min...
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto Kindle Scribe Colorsoft: riduce le cornici e div...
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint L'IA cambia tutte le regole della sicurezza tra ...
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026 L'Europa conta nella tecnologia e può ess...
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
Recensione OPPO Enco Air5 Pro: il perfet...
'Completamente falso': Elon Musk spegne ...
OnePlus invita gli utenti a provare i di...
Grand Theft Auto VI arriva su Amazon al ...
GTA 6, dubbi sulla modalità 'Perf...
Braun in offerta su Amazon: rasoi elettr...
Microsoft aggiorna ancora la gamma Surfa...
Tesla Semi coinvolto nel suo primo incid...
'Si. Può. Fare!': i ricercatori h...
HONOR Magic V6 ufficiale in Italia: la r...
Sicilia da record: entra in funzione F&e...
Apple taglia la produzione di iPhone 17:...
Pioggia di sconti nuovi, ecco la TOP 10 ...
Amazon Haul rilancia le promo dedicate a...
Componenti PC in offerta su Amazon: GeFo...
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: 10:15.


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