Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Kobo Clara Colour: il primo eReader a colori. Che spettacolo!
Recensione Kobo Clara Colour: il primo eReader a colori. Che spettacolo!
Kobo Clara Colour è il primo eReader dell’azienda insieme al Libra Colour a proporre agli utenti un display E INK a colori. È senza dubbio affascinante, con alcuni vantaggi che sono sicuramente tutti inerenti alla lettura dei fumetti o libri illustrati. Farà effettivamente la differenza sul mercato? Cerchiamo di scoprirlo in questa nostra recensione.
ASUS Advanced BTF: basta cavi in vista, assemblare un bel PC è un gioco da ragazzi
ASUS Advanced BTF: basta cavi in vista, assemblare un bel PC è un gioco da ragazzi
Advanced BTF (Back To Future) è l'evoluzione dell'ecosistema di componenti ASUS che permette di realizzare PC belli e anche molto potenti, liberi dai cavi in vista. Non solo schede madri con connettori sul retro o case compatibili, ma anche una RTX 4090 innovativa che sembra alimentata senza cavi.
Recensione Logitech G PRO 60 X: la prima tastiera 60% del marchio convince solo a metà
Recensione Logitech G PRO 60 X: la prima tastiera 60% del marchio convince solo a metà
Logitech G lancia la sua prima tastiera da gaming con layout al 60%, debuttando così in una categoria dove i grandi concorrenti della casa elvetica operano già da anni. Il produttore opta per gli switch ottici e, nonostante la partnership con i pro player, rinuncia ad alcune funzionalità 'essenziali' per il gaming competitivo. Il prezzo di vendita, inoltre, non è molto incoraggiante.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 21-09-2023, 01:15   #1
TommyB1992
Member
 
Iscritto dal: May 2013
Messaggi: 40
[C++] Segmentation fault con nlohmann json, problema di RAM?

Dopo essere impazzito ore, penso che il problema dipenda dalla libreria `nlohmann/json.hpp`

In questo pezzo di codice:
Codice:
void load_data(std::string fileName) {
    std::ifstream f(fileName);
    // riga 123
    json j = json::parse(f);
    // riga 987
   [...]
}
se metto il return, subito dopo json j = json:arse(f); al posto della riga 987, mi darà SEMPRE un Segmentation fault dopo X iterazioni del mio codice.
Se metto il return PRIMA di quella riga, cioè al posto di 123, il codice non crasherà mai.

È una questione di memoria? Mi sembra piuttosto strano.
TommyB1992 è offline   Rispondi citando il messaggio o parte di esso
Old 21-09-2023, 08:46   #2
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3597
misteri dei compilatori. Si dovrebbe disassemblare il codice in LM e vedere le due versioni, chissà cosa aggiunge di sbagliato in uno dei due casi.
Di sicuro una locazione di memoria errata che viene corretta con un semplice CR
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 21-09-2023, 13:42   #3
TommyB1992
Member
 
Iscritto dal: May 2013
Messaggi: 40
Quote:
Originariamente inviato da misterx Guarda i messaggi
misteri dei compilatori. Si dovrebbe disassemblare il codice in LM e vedere le due versioni, chissà cosa aggiunge di sbagliato in uno dei due casi.
Di sicuro una locazione di memoria errata che viene corretta con un semplice CR
Ma si può affermare che il problema non sia mio e/o a livello hardware ma dell'implementazione della libreria?
Giusto per capire che soluzione adottare (es. provare a cambiare libreria per gestire il .json)
TommyB1992 è offline   Rispondi citando il messaggio o parte di esso
Old 21-09-2023, 15:36   #4
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3597
non conosco quelle funzioni ma googolando:

Codice:
if (json_object_get_type(f) != json_type_object) {
   ...handle error...
}
forse devi controllare cosa passi a quel parser?
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2023, 21:18   #5
jepessen
Senior Member
 
L'Avatar di jepessen
 
Iscritto dal: Jul 2007
Città: Sicilia
Messaggi: 5501
Quote:
Originariamente inviato da TommyB1992 Guarda i messaggi
Ma si può affermare che il problema non sia mio e/o a livello hardware ma dell'implementazione della libreria?
Giusto per capire che soluzione adottare (es. provare a cambiare libreria per gestire il .json)
Penso proprio che il problema sia tuo, cosi' ad occhio... Ad esempio non fai nessuna gestione degli errori, giusto per capire cosa c'e' che non va...

Prima di dare la colpa di un errore ad altri, assicurati sempre prima che non sia tua... Quindi devi organizzare il tuo codice per gestire correttamente gli errori, oltre che utilizzare il debugger per vedere lo stack in caso di errore.
__________________
Non abbiamo ereditato il mondo dai nostri padri
L'abbiamo preso in prestito dai nostri figli
jepessen è offline   Rispondi citando il messaggio o parte di esso
Old 23-09-2023, 20:41   #6
Lampo89
Member
 
L'Avatar di Lampo89
 
Iscritto dal: Dec 2006
Messaggi: 33
Difficile dare una risposta certa senza ulteriori informazioni.
Per esempio:
1) stai usando la versione di libreria più recente a disposizione?
2) ambiente di esecuzione linux o windows?
Se windows, hai attivato i crash dumps?

Su linux, hai attivato i core dump? hai provato a girare il tuo programma sotto valgrind per individuare accessi alla memoria non validi oppure sotto un address sanitizer? (eg guarda il post qui https://www.iprogrammatori.it/forum-...t48631-30.html per un esempio)

In ogni caso, per avere degli stacktrace più puliti, consiglio di eseguire una compilazione a debug con simboli inclusi.

Se dovessi rispondere "di pancia", propenderei più per un problema di libreria. Però è altrettanto vero che, nell'eventualità che il codice che riproduce il problema non sia esattamente quello postato, non mi stupirei se fosse un problema "al contorno" dovuto a qualche magagna nella tua implementazione ..
Lampo89 è offline   Rispondi citando il messaggio o parte di esso
Old 25-09-2023, 00:44   #7
TommyB1992
Member
 
Iscritto dal: May 2013
Messaggi: 40
Quote:
Originariamente inviato da Lampo89 Guarda i messaggi
Difficile dare una risposta certa senza ulteriori informazioni.
Per esempio:
1) stai usando la versione di libreria più recente a disposizione?
2) ambiente di esecuzione linux o windows?
Se windows, hai attivato i crash dumps?

Su linux, hai attivato i core dump? hai provato a girare il tuo programma sotto valgrind per individuare accessi alla memoria non validi oppure sotto un address sanitizer? (eg guarda il post qui https://www.iprogrammatori.it/forum-...t48631-30.html per un esempio)

In ogni caso, per avere degli stacktrace più puliti, consiglio di eseguire una compilazione a debug con simboli inclusi.

Se dovessi rispondere "di pancia", propenderei più per un problema di libreria. Però è altrettanto vero che, nell'eventualità che il codice che riproduce il problema non sia esattamente quello postato, non mi stupirei se fosse un problema "al contorno" dovuto a qualche magagna nella tua implementazione ..

Alla fine ho fatto una cosa: ho scritto una mia classe per l'IO e ho smesso di salvare i dati in .json.
"Ho risolto", ma perdendo una giornata e mezza, però almeno ho risolto.

Però ti ringrazio del topic, ora lo leggo per quando mi servirà in futuro.
Comunque: Linux e al resto delle risposte è sempre no (ho provato solo con valgrind ma mi è crashato ubuntu durante il caricamento del json da tanti GB).
TommyB1992 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Kobo Clara Colour: il primo eReader a colori. Che spettacolo!  Recensione Kobo Clara Colour: il primo eReader a...
ASUS Advanced BTF: basta cavi in vista, assemblare un bel PC è un gioco da ragazzi ASUS Advanced BTF: basta cavi in vista, assembla...
Recensione Logitech G PRO 60 X: la prima tastiera 60% del marchio convince solo a metà Recensione Logitech G PRO 60 X: la prima tastier...
Bose Open Ultra: gli auricolari più audaci e unici di sempre! La recensione Bose Open Ultra: gli auricolari più audac...
Recensione ASUS ROG Cetra TWS SpeedNova: le migliori nella loro fascia, ma lo stelo va accorciato Recensione ASUS ROG Cetra TWS SpeedNova: le migl...
G.Skill Trident Z5 Royal: tornano le lus...
Weekend di super sconti Amazon: Google P...
Scopa elettrica senza fili HONITURE a 14...
ASTRO A10 Gen 2: cuffie da gioco con ott...
Cooler Master chiarisce: 'pasta termica ...
Google Pixel 8 Pro in offerta: con 128 G...
Bello e originale: solo 57€ per CMF by N...
Le svendite Bluetti sono super: EB55 da ...
Che sconti Samsung Galaxy Watch 4 (-63%)...
Nutanix Project Beacon punta a semplific...
Senua's Saga: Hellblade 2 è un ca...
Katabasi Studio e il caso 'Parthenope': ...
Opel Astra GSE, la prova bagagli. C'&egr...
LG dice addio al TV OLED arrotolabile: i...
Samsung HBM3 e HBM3E bocciate da NVIDIA?...
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:07.


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