Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Nothing Phone (4a) Pro cambia pelle: l'alluminio unibody sostituisce la trasparenza integrale, portando una solidità inedita. Sotto il cofano troviamo uno Snapdragon 7 Gen 4 che spinge forte, mentre il display è quasi da top dig amma. Con un teleobiettivo 3.5x e la Glyph Matrix evoluta, è la prova di maturità di Carl Pei. C'è qualche compromesso, ma a 499EUR la sostanza hardware e la sua unicità lo rendono un buon "flagship killer" in salsa 2026
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
Con Midnight, Blizzard tenta il colpaccio: il player housing sbarca finalmente su Azeroth insieme a una Quel'Thalas ricostruita da zero. Tra il dramma della famiglia Ventolesto e il nuovo Prey System, ecco com'è la nuova espansione di World of Warcraft
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Nuova frontiera per i robot tagliaerba, con Ecovacs GOAT O1200 LiDAR Pro che riconosce l'ambiente in maniera perfetta, grazie a due sensori LiDAR, e dopo la falciatura può anche rifinire il bordo con il tagliabordi a filo integrato
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-01-2008, 18:21   #1
caustico
Senior Member
 
L'Avatar di caustico
 
Iscritto dal: May 2006
Città: alessandria
Messaggi: 1693
[C] mai vista una cosa del genere

ciao a tutti, vi espongo brevemente qual'è il problema. . .sto facendo un programmino leggermente complesso (quantomeno piu del solito helloworld.c) ma mi capita una cosa incredibile. . .quando compilo ed eseguo il codice in universita' il programma gira perfettamente, quando invece compilo ed eseguo il medesimo codice a casa (sia sulla virtual machine che su una macchina dedicata) questo mi da una segmentation fault che a detta di gdb viene generata nel momento in cui faccio una fopen su un file. . .voi mi direte "be lo hai programmato male" e vi darei ragione visto che non sono proprio un fenomeno, ma com'è possibile che in uni funziona e a casa addirittura va in segmentation fault?. . .compilato con -Wall -pedantic non mi restituisce neanche un warning. . .ora se il programma non dovessi inviarlo al mio professore non ci sarebbero problemi, lo faccio andare in uni e chi si è visto si è visto. . .ma visto che il prof nelle migliori delle ipotesi lo compilera' sul suo portatile. . .puo' dipendere dalla versione di gcc? in uni usiamo fedora5 mi pare mentre a casa ho una suse virtuale e una mepis sul portatile. . .
__________________
Ho concluso affari positivamente con: Kawa, maxb81, pinok, DeicidE, borty, sprec13, Shandar, vtecb4st4rd, WhiteWolf42, feba, Bobosassa, devon_rex, cristianobon70, pingu79, Rospaccio, ces53, messmaker, iridio80, ilayu81, marcasso, imu, gianni165, Nike86, mojito
caustico è offline   Rispondi citando il messaggio o parte di esso
Old 29-01-2008, 18:28   #2
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
bla bla bla... sarebbe bastato incollare il sorgente correttamente formattato tra i tag CODE
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 29-01-2008, 19:01   #3
caustico
Senior Member
 
L'Avatar di caustico
 
Iscritto dal: May 2006
Città: alessandria
Messaggi: 1693
Quote:
Originariamente inviato da 71104 Guarda i messaggi
bla bla bla... sarebbe bastato incollare il sorgente correttamente formattato tra i tag CODE
ma sono 420 righe di codice. . .
__________________
Ho concluso affari positivamente con: Kawa, maxb81, pinok, DeicidE, borty, sprec13, Shandar, vtecb4st4rd, WhiteWolf42, feba, Bobosassa, devon_rex, cristianobon70, pingu79, Rospaccio, ces53, messmaker, iridio80, ilayu81, marcasso, imu, gianni165, Nike86, mojito
caustico è offline   Rispondi citando il messaggio o parte di esso
Old 29-01-2008, 19:04   #4
shinya
Senior Member
 
L'Avatar di shinya
 
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
beh incolla solo la parte che secondo te dovrebbe contenere l'errore...
shinya è offline   Rispondi citando il messaggio o parte di esso
Old 29-01-2008, 19:06   #5
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Beh, fatto sta che senza codice noi non possiamo farci niente

"Ti chiedi il come mai, ti chiedi il quasi quasi, dov'è la risposta? La risposta non la devi cercare fuori. La risposta è dentro di te ... epperò è sbagliata!"
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 29-01-2008, 19:18   #6
caustico
Senior Member
 
L'Avatar di caustico
 
Iscritto dal: May 2006
Città: alessandria
Messaggi: 1693
grazie a tutti ho risolto
__________________
Ho concluso affari positivamente con: Kawa, maxb81, pinok, DeicidE, borty, sprec13, Shandar, vtecb4st4rd, WhiteWolf42, feba, Bobosassa, devon_rex, cristianobon70, pingu79, Rospaccio, ces53, messmaker, iridio80, ilayu81, marcasso, imu, gianni165, Nike86, mojito

Ultima modifica di caustico : 31-01-2008 alle 17:39.
caustico è offline   Rispondi citando il messaggio o parte di esso
Old 29-01-2008, 19:22   #7
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Mi sembra il classico caso di memoria inizializzata (generalmente tutta azzerata) in una piattaforma e NON inizializzata (quindi con valori casuali) nell'altro.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 29-01-2008, 19:24   #8
caustico
Senior Member
 
L'Avatar di caustico
 
Iscritto dal: May 2006
Città: alessandria
Messaggi: 1693
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Mi sembra il classico caso di memoria inizializzata (generalmente tutta azzerata) in una piattaforma e NON inizializzata (quindi con valori casuali) nell'altro.
e come potrei risolvere? cioè non alloco una struttura, non ancora perlomeno per cui cosa dovrei andare a inizializzare?
__________________
Ho concluso affari positivamente con: Kawa, maxb81, pinok, DeicidE, borty, sprec13, Shandar, vtecb4st4rd, WhiteWolf42, feba, Bobosassa, devon_rex, cristianobon70, pingu79, Rospaccio, ces53, messmaker, iridio80, ilayu81, marcasso, imu, gianni165, Nike86, mojito
caustico è offline   Rispondi citando il messaggio o parte di esso
Old 29-01-2008, 19:45   #9
caustico
Senior Member
 
L'Avatar di caustico
 
Iscritto dal: May 2006
Città: alessandria
Messaggi: 1693
ho capito il problema. . .inizializzo una char descrizione[10000000] (lo avevo detto che non sono buono a programmare ) cosa che probabilmente non piace ne alla virtual ne al mio portatile. . .ma a questo punto vi faccio una domanda, come faccio ad allocare dinamicamente una stringa di caratteri? cioè come faccio a caricare un carattere alla volta senza sapere quanti caratteri devo caricare in una stringa?
__________________
Ho concluso affari positivamente con: Kawa, maxb81, pinok, DeicidE, borty, sprec13, Shandar, vtecb4st4rd, WhiteWolf42, feba, Bobosassa, devon_rex, cristianobon70, pingu79, Rospaccio, ces53, messmaker, iridio80, ilayu81, marcasso, imu, gianni165, Nike86, mojito
caustico è offline   Rispondi citando il messaggio o parte di esso
Old 29-01-2008, 19:59   #10
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2788
Devi usare malloc e realloc, ma forse puoi tenere il codice che hai e usare una memset per inizializzare il tutto (non ho letto il codice ma mi sembra di aver capito che sia questo il problema) -> LINK
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 29-01-2008, 20:09   #11
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da caustico Guarda i messaggi
ho capito il problema. . .inizializzo una char descrizione[10000000] (lo avevo detto che non sono buono a programmare ) cosa che probabilmente non piace ne alla virtual ne al mio portatile. . .ma a questo punto vi faccio una domanda, come faccio ad allocare dinamicamente una stringa di caratteri? cioè come faccio a caricare un carattere alla volta senza sapere quanti caratteri devo caricare in una stringa?
Ciao, scusa l'intromissione.
In pausa pranzo stavo controllando il tuo codice, ed avrei un paio di suggerimenti da dare:

Codice:
void aggiungi_feed(){
	char ind[100], tmp[10], str[100], cmd[]="wget -O tmp ";
	printf("\nInserisci l'indirizzo URL del feed da aggiungere ai preferiti\n");
	scanf("%s", ind);
	strcpy(str,ind);
	strcat(cmd,str);
	system(cmd);
Vai a fare la strcat a cmd. Non avrai spazio a sufficienza in questa stringa, molto probabilmente avrai un errore random (nel senso che ogni tanto funziona ed ogni tanto vai in crash).

Sempre nella stessa funzione:
Codice:
fp = fopen("tmp", "r");
fgets(tmp, 6, fp);
if(strcmp(tmp,"<?xml")==0){
	fp=fopen("rss","a");
	fprintf(fp,"\n");
	fprintf(fp,ind);
	fclose(fp);
	printf("\nFeed aggiunto ai preferiti\n");
	}
	else{
		system("clear");
		printf("\n\n\tL'indirizzo URL inserito non si riferisce a un feed, digita nuovamente 3 per riprovare\n");
		}
Controlla sempre che il file sia stato aperto correttamente. Nel caso il file tmp non venga trovato, o sia lockato da qualche altro programma, etc., la successiva fgets() andra' in crash. Lo stesso quando apri rss, subito dopo.

Supponi ora che le aperture dei file vadano bene. Siccome usi la variabile fp per entrambi i file, quando eseguirai la seconda fopen() ti perderai il file precedente, senza aver nemmeno la possibilita' di chiuderlo.
Pertanto, siccome il numero di file che puoi aprire e' limitato, ad un certo punto il tuo programma non potra' piu' aprire file, e siccome non hai fatto il controllo sull'esito dell'apertura, andra' in crash.
Attenzione che questo tipo di crash e' di quelli che definisci "stranissimi": sono effettivamente difficili da trovare semplicemente analizzando l'output (del tipo "perche' funzionava correttamente fino a 10 min. fa ed ora va in crash?")

Codice:
void memorizza(char *in){

	char tmp[5], titolo[500], descrizione[10000000], link[500], data[55], enclosure[500],type[500];
	char fine;
Beh, questa l'hai trovata tu:in generale non e' bello creare una variabile locale da 10 milioni di caratteri. Potresti avere qualche problema.
Per risolverlo, prima di tutto valuta se e' davvero necessario avere una variabile cosi' grande (sai, l'hai chiamata descrizione....).
In secondo luogo, puoi valutare se allocare dinamicamente o metterla globale/statica.
Anche in questa funzione apri un file senza controllare, ma ne abbiamo gia' parlato.

ATTENZIONE - attento al "gioco" che fai chiamando leggi_file() che richiama apri_file() che a sua volta richiama leggi_file(). Non e' sano. Controlla se puoi risolvere in altro modo (sicuramente lo puoi fare).
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 29-01-2008, 22:05   #12
caustico
Senior Member
 
L'Avatar di caustico
 
Iscritto dal: May 2006
Città: alessandria
Messaggi: 1693
innanzi tutto grazie sottovento passo subito a qualche delucidazione,allora: non faccio ulteriori controlli che il file sia stato aperto correttamente o meno all'interno della apri_file perchè questi vengono fatti dalla void controlla_input che passa alla apri_file solo nel caso in cui l'apertura avviene con successo; per quanto riguarda il gioco che faccio chiamando leggi_file() che richiama apri_file() che a sua volta richiama leggi_file() pur convenendo con te che non sia il massimo è l'unica soluzione pseudoplausibile che mi è venuta in mente per permettere al programma di non uscire dall'esecuzione qualora non venga passato un argomento durante l'esecuzione o nel caso in cui il file specificato non esista. . .per quanto riguarda il resto hai ragionissima su tutta la linea, la var descrizione contiene quello che c'è all'interno dei campi <description></description> di un rss, di conseguenza non ha una lunghezza fissa, e pur essendo discretamente grande non è infinito. . .quindi di sicuro se lo sapessi fare char descrizione sarebbe una var dinamica. . .
__________________
Ho concluso affari positivamente con: Kawa, maxb81, pinok, DeicidE, borty, sprec13, Shandar, vtecb4st4rd, WhiteWolf42, feba, Bobosassa, devon_rex, cristianobon70, pingu79, Rospaccio, ces53, messmaker, iridio80, ilayu81, marcasso, imu, gianni165, Nike86, mojito
caustico è offline   Rispondi citando il messaggio o parte di esso
Old 30-01-2008, 00:36   #13
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da caustico Guarda i messaggi
innanzi tutto grazie sottovento passo subito a qualche delucidazione,allora: non faccio ulteriori controlli che il file sia stato aperto correttamente o meno all'interno della apri_file perchè questi vengono fatti dalla void controlla_input che passa alla apri_file solo nel caso in cui l'apertura avviene con successo; per quanto riguarda il gioco che faccio chiamando leggi_file() che richiama apri_file() che a sua volta richiama leggi_file() pur convenendo con te che non sia il massimo è l'unica soluzione pseudoplausibile che mi è venuta in mente per permettere al programma di non uscire dall'esecuzione qualora non venga passato un argomento durante l'esecuzione o nel caso in cui il file specificato non esista. . .per quanto riguarda il resto hai ragionissima su tutta la linea, la var descrizione contiene quello che c'è all'interno dei campi <description></description> di un rss, di conseguenza non ha una lunghezza fissa, e pur essendo discretamente grande non è infinito. . .quindi di sicuro se lo sapessi fare char descrizione sarebbe una var dinamica. . .
Ciao,
per quanto riguarda leggi_file() e apri_file() direi che cambiare non e' difficilissimo. Tutto sommato, visto che apri_file() e' chiamata in due punti soltanto (uno di questi e' appunto leggi_file()) potresti semplicemente scrivere:

Codice:
void apri_file(char *i)
{
	char s[20]="wget -O file ";
	char op[500], str[500];
	fp=fopen(i,"r");
	while (fp == NULL)
	{
		printf("Il File non esiste!!!\n");
		leggi_file(i);
		fp=fopen(i,"r");
	}
Ovviamente in leggi_file() toglierai la chiamata ad apri_file().
Non spaventarti se leggi_file contiene solo un paio di righe di codice: e' segno che stai andando nella direzione giusta.
Inoltre otterrai anche il vantaggio che le funzioni, cambiate in questo modo, fanno esattamente quello che il loro nome suggerisce, e non qualcosa di piu'.
Per questo stesso motivo, mi permetterei di suggerirti di togliere la chiamata ad apri_file da controlla_input().
Fai fare a controlla_input() solo il controllo e fagli ritornare un risultato. Usa poi questo esito per chiamare o meno la apri_file().

Altro suggerimento: spesso trovare gli errori run time e' piuttosto difficile. Invece che fare una printf ("Il file non esiste\n") (che potrebbe non esser vero, magari il problema e' un altro), scrivi
Codice:
perror ("non posso aprire il file");
La perror() fara' seguire alla tua scritta il motivo della mancata apertura: magari non hai i permessi, o il file e' lockato,...

Per quanto riguarda la tua descrizione, puoi fare come ti e' stato suggerito prima: dichiarare quel campo come puntatore a char (del tipo char *descrizione) e scrivere:
Codice:
void memorizza(char *in)
{
  char tmp[5], titolo[500], *descrizione, link[500], data[55], enclosure[500],type[500];

  descrizione = (char *)malloc (10000000);
  if (descrizione == NULL)
  {
    printf ("Impossibile allocare memoria per la descrizione!!\n"); // Non usare perror qui!
    // Esegui ora qualche altra operazione. Non puoi seguire il normale flusso di esecuzione.
  }

   ...
    qui usi la memoria
   ...

  free (descrizione);  // Restituisci la memoria al sistema
Ricorda di fare la free() in qualunque caso: se decidi di uscire prima da questa funzione e descrizione e' allocata, deallocala.
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 30-01-2008, 11:02   #14
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6859
Quote:
Originariamente inviato da caustico Guarda i messaggi
ciao a tutti, vi espongo brevemente qual'è il problema. . .sto facendo un programmino leggermente complesso (quantomeno piu del solito helloworld.c) ma mi capita una cosa incredibile. . .quando compilo ed eseguo il codice in universita' il programma gira perfettamente, quando invece compilo ed eseguo il medesimo codice a casa (sia sulla virtual machine che su una macchina dedicata) questo mi da una segmentation fault che a detta di gdb viene generata nel momento in cui faccio una fopen su un file. . .voi mi direte "be lo hai programmato male" e vi darei ragione visto che non sono proprio un fenomeno, ma com'è possibile che in uni funziona e a casa addirittura va in segmentation fault?. . .compilato con -Wall -pedantic non mi restituisce neanche un warning. . .ora se il programma non dovessi inviarlo al mio professore non ci sarebbero problemi, lo faccio andare in uni e chi si è visto si è visto. . .ma visto che il prof nelle migliori delle ipotesi lo compilera' sul suo portatile. . .puo' dipendere dalla versione di gcc? in uni usiamo fedora5 mi pare mentre a casa ho una suse virtuale e una mepis sul portatile. . .
La causa più comune sono variabili non inizializzate. Un compilatore magari le inizializza a caso, l'altro per niente ed ecco che scappa il Segmentation Fault. Infatti,in genere,è buona norma compilare ed eseguire il proprio sorgente con diversi compilatori e verificare che il comportamento sia lo stesso.
Unrue è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico Recensione Nothing Phone (4a) Pro: finalmente in...
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Muse Spark è qui: Meta abbandona ...
Microsoft testa su Xbox Insiders la poss...
Climatizzatore 12000 BTU A++ con Wi-Fi a...
La crisi delle memorie farà ricca Samsun...
Il ventilatore Dyson che puoi indossare:...
Insta360 presenta Snap, lo schermo selfi...
Razer Kishi V2 a soli 59,99€ su Amazon: ...
Dallo scantinato di Jobs al NeXT: apre l...
Trasformare il PC in una workstation AI ...
ECOVACS DEEBOT T80 OMNI a soli 499€: il ...
Gli iPhone e i mid-range Samsung guidano...
Maxi offerte Amazon sui grandi elettrodo...
Intel continuerà a produrre Rapto...
Sky Wifi potenzia la copertura: nuovo ac...
Il chiplet GaN più sottile al mon...
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: 09:58.


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