Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo
Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo
Il più recente robot per la pulizia domestica di Dreame, modello Aqua10 Ultra Roller, abbina un potente motore di aspirazione della polvere a un sofisticato sistema di lavaggio con rullo integrato. Il tutto governato dalla logica di intelligenza artificiale, per i migliori risultati
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti
Siamo volati fino a Belfast, capitale dell'Irlanda Del Nord, per scoprire il nuovo Realme 15 Pro 5G Game Of Thrones Limited Edition. Una partnership coi fiocchi, quella tra Realme e HBO, un esercizio di stile davvero ben riuscito. Ma vi raccontiamo tutto nel nostro articolo
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
Il Gigabyte Gaming A16 offre un buon equilibrio tra prestazioni e prezzo: con Core i7-13620H e RTX 5060 Laptop garantisce gaming fluido in Full HD/1440p e supporto DLSS 4. Display 165 Hz reattivo, buona autonomia e raffreddamento efficace; peccano però le USB e la qualità cromatica del pannello. Prezzo: circa 1200€.
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: 2776
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: 6183
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


Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo Dreame Aqua10 Ultra Roller, la pulizia di casa c...
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti Recensione Realme 15 Pro Game Of Thrones: un ver...
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Lapt...
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Panasonic Lumix S9: disponibile in quatt...
Nikon presenta due obiettivi: NIKKOR Z D...
Horizon vs Light of Motiram, si entra ne...
Atari rilancia Intellivision Sprint e fa...
Leapmotor lancia in Italia il SUV elettr...
QNAP punta sempre più in alto con...
Scandalo ibride plug-in: consumano come ...
L'intelligenza artificiale fa sempre pi&...
Oracle dal punto di vista dell’Europa: l...
James Dyson Award 2025: dall'accessibili...
Xiaomi: gli smartphone con display poste...
Final Fantasy 7 Remake Part 3 offrir&agr...
Chery presenta Omoda 4, da benzina a ele...
TSMC alza i prezzi: Qualcomm e MediaTek ...
Una Offline Room per aiutare gli student...
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: 05:09.


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