Torna indietro   Hardware Upgrade Forum > Software > Programmazione

vivo X200 FE: il top di gamma si è fatto tascabile?
vivo X200 FE: il top di gamma si è fatto tascabile?
Molte persone vorrebbero prestazioni da top di gamma, ma in formato più tascabile. vivo X200 FE si indirizza proprio a questo tipo di persone e vuole rappresentare il giusto mix tra prestazioni e ingombri, con una batteria da ben 6.500 mAh in un corpo da 7,99 millimetri di spessore. La nostra prova completa
TCL 65C7K, televisore Mini-LED di qualità, versatile e dal prezzo competitivo
TCL 65C7K, televisore Mini-LED di qualità, versatile e dal prezzo competitivo
Tecnologia Mini LED, pannello 4K QLED HVA a 144Hz e audio Bang & Olufsen: il nuovo TCL 65C7K si candida come best buy per l’intrattenimento domestico a tutto tondo, con promozioni che ne esaltano il rapporto qualità/prezzo
Fujifilm X-E5: la Fuji X che tutti gli appassionati volevano
Fujifilm X-E5: la Fuji X che tutti gli appassionati volevano
Dopo il fascino un po’ elitario della GFX100RF e le polemiche intorno a x Half, la nuova Fujifilm X-E5 riporta tutti d’accordo: una mirrorless compatta, leggera, elegante, e finalmente con stabilizzazione IBIS a bordo anche sulla serie E. Con il sensore da 40 MP e il processore X-Processor 5, eredita prestazioni da sorelle più costose, ma con l'ergonomia del mirino laterale in stile telemetro e una nuova ghiera per le simulazioni pellicola. Il tutto a un prezzo che, seppur più alto della precedente X-E4, la pne in kit al parti di X100VI
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 09-05-2016, 13:23   #1
Vexem
Senior Member
 
L'Avatar di Vexem
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 387
[C] Clion - Strano comportamento della console IDE

Come da titolo, sto usando CLion come IDE.

Non riesco a capire per quale ragione mi runna il programma a metà

In parole povere: devo stampare il contenuto di una matrice, a volte (raramente) lo stampa tutto, a volte si ferma prima della fine.
Con il terminale di ubuntu nessun problema: stampa tutta la matrice.

Probabilmente è una banalità, ma non riesco a capire dove mettere le mani.
Se avete qualche idea, tutto è ben accetto
Vexem è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2016, 16:18   #2
Vexem
Senior Member
 
L'Avatar di Vexem
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 387
Quote:
Originariamente inviato da Antonio23 Guarda i messaggi
se non posti nemmeno del codice di esempio da provare nessuno credo abbia la palla di vetro...
Il motivo per il quale non ho postato il codice è perchè su terminale ubuntu fila tutto liscio, quindi ho pensato si trattasse di qualche impostazione errata nell'IDE.

In ogni caso, allego la funzione che crea la matrice, e la funzione che la stampa

Codice:
Posto** creaSala(){ 
    Posto **v = calloc(numerofile,sizeof(Posto*));
    assert(v!=NULL);
    int fila ;
    int posto;
    Posto *seat;
    for(fila=0;fila<numerofile;fila++){
        *(v+fila)=calloc(postixfila,sizeof(Posto));
        assert(*(v+fila)!= NULL);
        for(posto=0;posto<postixfila;posto++){
            seat = nuovoPosto(posto+1, fila+1);  
            v[fila][posto] = *seat;  

        }
    }
    return v;
}

void stampaSala(Posto **sala){
    int fila;
    int posto;
    int numposto;
    int numfila;
    Posto *temp;

    for(fila =0; fila<numerofile; fila++){
        printf("--- Fila numero %d --- \n",numfila+1 );
         for(posto=0;posto<postixfila;posto++){

            temp = &sala[fila][posto];  

            numposto =getnumposto(temp);
            numfila = getnumfila(temp);

            printf("numero di fila: %d \n",numfila );
            printf("numero di posto: %d \n",numposto );
             if(temp->occupato==false){
                 printf("il posto è libero \n\n");

             }
        }
    }

}
Considerate che è abbastanza abbozzato come codice
Vexem è offline   Rispondi citando il messaggio o parte di esso
Old 09-05-2016, 21:23   #3
Vexem
Senior Member
 
L'Avatar di Vexem
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 387
Quote:
Originariamente inviato da Antonio23 Guarda i messaggi
fa una cosa,

all'interno del main, metti un return 0; come ultima istruzione, poi fai girare il tuo programma nel terminale di ubuntu e scrivi "echo $?" dopo che il programma finisce. Controlla che il valore ritornato e' 0.

se non lo e', c'e' qualcosa che crasha da qualche parte. non vedo nessun motivo per cui il tuo IDE dovrebbe comportarsi diversamente se il programme e' scritto correttamente.
Il valore returnato è 0, quindi nessun problema.

Ho notato un'altra cosa: con lo stesso input il programma si "ferma" in diversi punti.
A volte scrive qualche riga, a volte quasi tutte, a volte tutto.

Potrebbe essere un problema di timeout ?

Ultima modifica di Vexem : 09-05-2016 alle 21:29.
Vexem è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2016, 06:37   #4
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
cosa fa nuovoPosto()?
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2016, 08:24   #5
Vexem
Senior Member
 
L'Avatar di Vexem
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 387
Quote:
Originariamente inviato da sottovento Guarda i messaggi
cosa fa nuovoPosto()?
È il costruttore della struct posto.
Gli argomenti indicano fila e numero del posto.
__________________
CPU AMD Ryzen 5 3600X | Motherboard MSI B450 Gaming Plus | GPU ASUS Dual Radeon RX 5700 EVO OC Edition 8GB | RAM Crucial Ballistix Elite 2*8GB 3600MHz CL16 DDR4 | PSU LC-Power LC6850M 850W | SSD Crucial P2 CT1000P2SSD8 | Monitor Samsung U28E590D + Samsung U28R552UQR | Case be quiet! Pure Base 500DX Black | Speakers Logitech Z623
Vexem è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2016, 08:30   #6
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Vexem Guarda i messaggi
È il costruttore della struct posto.
Gli argomenti indicano fila e numero del posto.
Ho capito; tuttavia rimane la curiosita' di vederla, e magari di vedere le parti che mancano, tanto per avere un quadro piu' completo. Non credo siano troppo lunghe, penso che si possano postare qui, giusto?

Quello che mi fa pensare e' l'uso della nuovoPosto();
Codice:
seat = nuovoPosto(posto+1, fila+1);
L'hai implementata allocando memoria?
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2016, 09:09   #7
Vexem
Senior Member
 
L'Avatar di Vexem
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 387
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Ho capito; tuttavia rimane la curiosita' di vederla, e magari di vedere le parti che mancano, tanto per avere un quadro piu' completo. Non credo siano troppo lunghe, penso che si possano postare qui, giusto?

Quello che mi fa pensare e' l'uso della nuovoPosto();
Codice:
seat = nuovoPosto(posto+1, fila+1);
L'hai implementata allocando memoria?
Nessun problema, ti allego Posto.c
Codice:
#include <stdlib.h>
#include "Posto.h"
#include <stdbool.h>

Posto *nuovoPosto(int numposto, int numfila){
    Posto *x = (Posto*)calloc(1,sizeof(Posto));
    x->numfila = numfila;
    x->numposto = numposto;
    x->occupato = false;
}

void cancellaPosto(Posto *x){
    free(x);
}
void prenotaposto(Posto *x){
    x->occupato=true;
}

void cancellaprenotazione(Posto *x){
    x->occupato=false;
}

int getnumposto(Posto *x){
    return x->numposto;
    }

int getnumfila(Posto *x){
    return x->numfila;
}

void setnum(Posto *x,int num){
    x->numposto=num;
}

void setfila(Posto *x,int fila){
    x->numfila=fila;
}
questo invece è il "distruttore" della matrice

Codice:
void distruggiSala(Posto **v,int n){  
    int i;
    for(i=0;i<n;i++){   
        free(v[i]);}
    free(v) ; 
}
Il main per ora fa altro che inizializzare le variabili globali int postixfila e int numerofile e chiamare i tre metodi: manca ancora tutta la parte sulla programmazione di rete.
Credo comunque di aver dimenticato una free(seat), ma ti anticipo subito che il risultato non cambia

Ultima modifica di Vexem : 10-05-2016 alle 09:20.
Vexem è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2016, 09:29   #8
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Ok, grazie.
Una cosa che salta subito all'occhio e'
Codice:
seat = nuovoPosto(posto+1, fila+1);
questa va ad allocare memoria per un nuovo posto ed inizializza il contenuto correttamente; poi vai a fare
Codice:
v[fila][posto] = *seat;
cioe' assegni il contenuto dei campi al record allocato precedentemente.
Cosa succede a seat? Sembra proprio che venga perso, vale a dire stai perdendo memoria.
Non credo che questo sia il tuo problema, ma prima di tutto lo sistemerei, visto che il leakage e' in un ciclo e quindi vai a perdere piu' record.

Per quanto riguarda il problema della stampa parziale: hai provato a mettere una printf() ad ogni esecuzione del ciclo?
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2016, 09:40   #9
Vexem
Senior Member
 
L'Avatar di Vexem
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 387
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Ok, grazie.
Una cosa che salta subito all'occhio e'
Codice:
seat = nuovoPosto(posto+1, fila+1);
questa va ad allocare memoria per un nuovo posto ed inizializza il contenuto correttamente; poi vai a fare
Codice:
v[fila][posto] = *seat;
cioe' assegni il contenuto dei campi al record allocato precedentemente.
Cosa succede a seat? Sembra proprio che venga perso, vale a dire stai perdendo memoria.
Non credo che questo sia il tuo problema, ma prima di tutto lo sistemerei, visto che il leakage e' in un ciclo e quindi vai a perdere piu' record.

Per quanto riguarda il problema della stampa parziale: hai provato a mettere una printf() ad ogni esecuzione del ciclo?

Quindi la free(seat) va inserita nel ciclo, non fuori ?
In ogni caso ho provato a mettere una printf() ovunque, il processo semplicemente si interrompe all'improvviso, ogni volta in un punto diverso.

In ogni caso, grazie per il tuo aiuto !
Vexem è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2016, 09:54   #10
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Vexem Guarda i messaggi
Quindi la free(seat) va inserita nel ciclo, non fuori ?
In ogni caso ho provato a mettere una printf() ovunque, il processo semplicemente si interrompe all'improvviso, ogni volta in un punto diverso.

In ogni caso, grazie per il tuo aiuto !
Ad essere sinceri non ho visto alcuna free(seat) nel codice che hai postato, quindi non so se e dove l'hai posizionata.
Hai creato una funzione cancellaPosto(), ti suggerisco di usarla.
Per quanto riguarda la nuovoPosto() non fai il controllo se la memoria e' effettivamente allocata. Dalle altre parti hai messo un'assert, ti suggerisco di fare altrettanto.

Tornando al problema principale (i.e. il processo si interrompe all'improvviso): purtroppo stiamo lavorando su pezzi di codice, quindi si possono fare solo delle ipotesi.

Quando un processo si interrompe all'improvviso, normalmente controllo che la memoria a cui ha fatto accesso sia valida (allocata, inizializzata, ...).
Purtroppo non lo si puo' fare, qui; lo puoi fare? Se ti serve un parere, puoi pubblicare il codice per intero.

Altra cosa: i cicli sono regolati dalle variabili numerofila e postixfila ed anche quelli compaiono nel codice all'improvviso. Occorrerebbe accertarsi che il loro valore sia corretto e non vengano sovrascritte inavvertitamente.

Inoltre, conoscendomi (e' un errore che faccio spesso) controllerei anche lo SCOPE di quelle variabili: magari hanno il valore corretto ma inavvertitamente potrei aver dichiarato una variabile locale con lo stesso nome, che quindi andrebbe a nascondere quella con il valore corretto. Sei in questo caso?


Quindi, visto che parlavamo di printf(), stamperei:
- le variabili numerofile e postixfila all'inizio dei cicli;
- le variabili di ciclo, le vorrei vedere incrementarsi;
- metterei una printf() di saluti alla fine del programma, per vedere se effettivamente arrivo fino li'.

Infine mi accerterei che non sia uno dei soliti problemi di certi IDE tipo: bufferizzazione dell'output, chiusura immediata della finestra al termine dell'esecuzione, ecc.
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2016, 10:10   #11
Vexem
Senior Member
 
L'Avatar di Vexem
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 387
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Ad essere sinceri non ho visto alcuna free(seat) nel codice che hai postato, quindi non so se e dove l'hai posizionata.
Hai creato una funzione cancellaPosto(), ti suggerisco di usarla.
Si hai ragione, ma ho scritto in un post precedente di averla dimenticata.
Non ero sicuro se metterla dentro o fuori dal ciclo.

Quote:
Tornando al problema principale (i.e. il processo si interrompe all'improvviso): purtroppo stiamo lavorando su pezzi di codice, quindi si possono fare solo delle ipotesi.
Quando un processo si interrompe all'improvviso, normalmente controllo che la memoria a cui ha fatto accesso sia valida (allocata, inizializzata, ...).
Purtroppo non lo si puo' fare, qui; lo puoi fare? Se ti serve un parere, puoi pubblicare il codice per intero.
E' praticamente tutto il codice, il main è semplicemente

Codice:
int main() {
printf("Inserire numero di file: ");
    scanf("%d",&numerofile);

    printf("Inserire posti per fila: ");
    scanf("%d",&postixfila);

    Sala = creaSala();
    stampaSala(Sala);
 distruggiSala(Sala,numerofile);

    return 0;}
Ecco il link a tutto il programma (ovviamente escluso Posto.c)

http://paste.ofcode.org/pJjRr76KqbHXM4KeMV9Jaf

Posto.h

http://paste.ofcode.org/FUrpAijA6tLFa2RhnQe8r9


Quote:
Altra cosa: i cicli sono regolati dalle variabili numerofila e postixfila ed anche quelli compaiono nel codice all'improvviso. Occorrerebbe accertarsi che il loro valore sia corretto e non vengano sovrascritte inavvertitamente.
Sono variabili globali, credo di averlo accennato qualche post dietro.

Quote:
Inoltre, conoscendomi (e' un errore che faccio spesso) controllerei anche lo SCOPE di quelle variabili: magari hanno il valore corretto ma inavvertitamente potrei aver dichiarato una variabile locale con lo stesso nome, che quindi andrebbe a nascondere quella con il valore corretto. Sei in questo caso?


Quindi, visto che parlavamo di printf(), stamperei:
- le variabili numerofile e postixfila all'inizio dei cicli;
- le variabili di ciclo, le vorrei vedere incrementarsi;
- metterei una printf() di saluti alla fine del programma, per vedere se effettivamente arrivo fino li'.

Infine mi accerterei che non sia uno dei soliti problemi di certi IDE tipo: bufferizzazione dell'output, chiusura immediata della finestra al termine dell'esecuzione, ecc.
Ora provo tutto, grazie mille !

Ultima modifica di Vexem : 10-05-2016 alle 10:19.
Vexem è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2016, 10:27   #12
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Me n'e' scappata una importante. Perdona, la vecchiaia...
Codice:
#include <stdlib.h>
#include "Posto.h"
#include <stdbool.h>

Posto *nuovoPosto(int numposto, int numfila){
    Posto *x = (Posto*)calloc(1,sizeof(Posto));
    x->numfila = numfila;
    x->numposto = numposto;
    x->occupato = false;
}
questa funzione non ritorna nulla. Questo potrebbe essere il tuo problema: quando sei fortunato, becchi un'area di memoria per seat che e' valida, scrivi e prosegui felicemente.
Altrimenti il programma puo' far di tutto, compreso terminare inaspettatamente.
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2016, 10:31   #13
Vexem
Senior Member
 
L'Avatar di Vexem
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 387
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Me n'e' scappata una importante. Perdona, la vecchiaia...
Codice:
#include <stdlib.h>
#include "Posto.h"
#include <stdbool.h>

Posto *nuovoPosto(int numposto, int numfila){
    Posto *x = (Posto*)calloc(1,sizeof(Posto));
    x->numfila = numfila;
    x->numposto = numposto;
    x->occupato = false;
}
questa funzione non ritorna nulla. Questo potrebbe essere il tuo problema: quando sei fortunato, becchi un'area di memoria per seat che e' valida, scrivi e prosegui felicemente.
Altrimenti il programma puo' far di tutto, compreso terminare inaspettatamente.
Pardon, dimenticanza mia.
Ho inserito un "return x" ma niente, continua ad interrompersi.

Strano che il compilatore non mi abbia detto nulla.
Tu hai provato a farlo partire ?

Ecco cosa fa

Ultima modifica di Vexem : 10-05-2016 alle 10:44.
Vexem è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2016, 10:45   #14
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Vexem Guarda i messaggi
Pardon, dimenticanza mia.
Ho inserito un "return x" ma niente, continua ad interrompersi.

Strano che il compilatore non mi abbia detto nulla.
Tu hai provato a farlo partire ?
L'ho provato ora. Ho dovuto fare alcune modifiche minori per poterlo compilare.
Sembra funzionare.
Cmq resta la curiosita': hai aggiunto le printf()?
Soprattutto: immagino che il tuo ambiente ti dia a disposizione un debugger. Hai provato a farlo girare con il debugger? Cosa ti dice?
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2016, 10:51   #15
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Ops, ho visto l'immagine DOPO aver postato la mia risposta.

Come ti dicevo, ho provato a farlo girare e sembra funzionare, ma cosi' non e' nel tuo ambiente.
Nel mio test ho desunto l'implementazione di Posto.h dal resto del codice; potresti pubblicare invece la tua versione?
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2016, 10:54   #16
Vexem
Senior Member
 
L'Avatar di Vexem
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 387
Quote:
Originariamente inviato da sottovento Guarda i messaggi
L'ho provato ora. Ho dovuto fare alcune modifiche minori per poterlo compilare.
Sembra funzionare.
Cmq resta la curiosita': hai aggiunto le printf()?
Soprattutto: immagino che il tuo ambiente ti dia a disposizione un debugger. Hai provato a farlo girare con il debugger? Cosa ti dice?
Si, ho messo le printf dove dicevi tu, e tutto fino all'interruzione funziona bene.
Il debugger me lo runna correttamente, ma non so come interpretare questo fatto :|

ecco Posto.h

http://paste.ofcode.org/FUrpAijA6tLFa2RhnQe8r9
Vexem è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2016, 11:15   #17
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Davvero strano, anche perche' a me continua a funzionare.
C'e' un altro errore minore:

Codice:
printf("--- Fila numero %d --- \n", numfila + 1);
numfila in quel momento non e' inizializzato, quindi questa istruzione non e' corretta, puoi sostituirla con

Codice:
printf("--- Fila numero %d --- \n", fila + 1);
Tornando alle cose serie: sembra che ci sia bisogno di un esorcista.
Sarebbe opportuno provare ad escludere delle parti per vedere se almeno si arriva alla fine. Il programma pero' e' gia' piuttosto scarno, non so cosa si possa escludere.

Proverei escludendo l'inizializzazione (i.e. commentandola):
Codice:
Posto** creaSala(){
	Posto **v = (Posto **)calloc(numerofile, sizeof(Posto*));
	assert(v != NULL);
	int fila;
	int posto;
	Posto *seat;
	for (fila = 0; fila<numerofile; fila++){
		*(v + fila) = (Posto *)calloc(postixfila, sizeof(Posto));
		assert(*(v + fila) != NULL);
		for (posto = 0; posto<postixfila; posto++){
			//seat = nuovoPosto(posto + 1, fila + 1);
			//v[fila][posto] = *seat;
			//free(seat);
		}
	}

	return v;
}
Siccome calloc() inizializza la memoria a zero, dovresti stampare una serie di posti/file a zero, ma l'importante e' capire se arrivi fino alla fine in questo modo....

ALTRA COSA: aspetta a fare la distruggiSala(), commenta anche quella. Vediamo se si arriva in fondo, prima.
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2016, 11:39   #18
Vexem
Senior Member
 
L'Avatar di Vexem
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 387
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Davvero strano, anche perche' a me continua a funzionare.
C'e' un altro errore minore:

Codice:
printf("--- Fila numero %d --- \n", numfila + 1);
numfila in quel momento non e' inizializzato, quindi questa istruzione non e' corretta, puoi sostituirla con

Codice:
printf("--- Fila numero %d --- \n", fila + 1);
Tornando alle cose serie: sembra che ci sia bisogno di un esorcista.
Sarebbe opportuno provare ad escludere delle parti per vedere se almeno si arriva alla fine. Il programma pero' e' gia' piuttosto scarno, non so cosa si possa escludere.

Proverei escludendo l'inizializzazione (i.e. commentandola):
Codice:
Posto** creaSala(){
	Posto **v = (Posto **)calloc(numerofile, sizeof(Posto*));
	assert(v != NULL);
	int fila;
	int posto;
	Posto *seat;
	for (fila = 0; fila<numerofile; fila++){
		*(v + fila) = (Posto *)calloc(postixfila, sizeof(Posto));
		assert(*(v + fila) != NULL);
		for (posto = 0; posto<postixfila; posto++){
			//seat = nuovoPosto(posto + 1, fila + 1);
			//v[fila][posto] = *seat;
			//free(seat);
		}
	}

	return v;
}
Siccome calloc() inizializza la memoria a zero, dovresti stampare una serie di posti/file a zero, ma l'importante e' capire se arrivi fino alla fine in questo modo....

ALTRA COSA: aspetta a fare la distruggiSala(), commenta anche quella. Vediamo se si arriva in fondo, prima.
Ho provato a fare tutto quello che dici.
Commentando l'inizializzazione, stampa tutti 0 ma si interrompe comunque.
Togliendo distruggiSala() non cambia nulla (oltre all'ovvio memory leak).

A questo punto direi che è un problema (o magari un'impostazione) dell'IDE.
Provo a farlo runnare sulla macchina virtuale con ubuntu del portatile , vediamo cosa succede.

Male che vada, cambio ambiente
Vexem è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2016, 12:29   #19
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Vexem Guarda i messaggi
Ho provato a fare tutto quello che dici.
Commentando l'inizializzazione, stampa tutti 0 ma si interrompe comunque.
Togliendo distruggiSala() non cambia nulla (oltre all'ovvio memory leak).

A questo punto direi che è un problema (o magari un'impostazione) dell'IDE.
Provo a farlo runnare sulla macchina virtuale con ubuntu del portatile , vediamo cosa succede.

Male che vada, cambio ambiente
Prova a togliere ancora qualcosa, magari nella stampa. Sarebbe interessante capire cosa succede. Chissa', magari ha ragione lui e ci sta sfuggendo qualcosa.
Per esempio, cambia la stampa:

Codice:
void stampaSala(Posto **sala){
	int fila;
	int posto;
	int numposto;
	int numfila;
	Posto *temp;

	for (fila = 0; fila<numerofile; fila++){
		//printf("--- Fila numero %d --- \n", numfila + 1);	originale
		printf("--- Fila numero %d --- \n", fila + 1);
		for (posto = 0; posto<postixfila; posto++){

			temp = &sala[fila][posto];

//			numposto = getnumposto(temp);
//			numfila = getnumfila(temp);
			numposto = temp->numposto;
			numfila = temp->numfila;

			printf("numero di fila: %d \n", numfila);
			printf("numero di posto: %d \n", numposto);
//			if (temp->occupato == false){
//				printf("il posto e' libero \n\n");
//			}
		}
	}

}
se anche cosi' non arriva alla fine, prova a commentare anche numfila e numposto, inizializzandoli PRIMA del ciclo. A questo punto se continua a terminare in maniera abnorme, lascerei perdere quell'ambiente.

Altra cosa: incrementa il livello dei warning fino al massimo, cioe' al livello piu' pedante possibile, cosi' da avere piu' informazioni su quanto sta succedendo...
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2016, 14:03   #20
Vexem
Senior Member
 
L'Avatar di Vexem
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 387
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Prova a togliere ancora qualcosa, magari nella stampa. Sarebbe interessante capire cosa succede. Chissa', magari ha ragione lui e ci sta sfuggendo qualcosa.
Per esempio, cambia la stampa:

Codice:
void stampaSala(Posto **sala){
	int fila;
	int posto;
	int numposto;
	int numfila;
	Posto *temp;

	for (fila = 0; fila<numerofile; fila++){
		//printf("--- Fila numero %d --- \n", numfila + 1);	originale
		printf("--- Fila numero %d --- \n", fila + 1);
		for (posto = 0; posto<postixfila; posto++){

			temp = &sala[fila][posto];

//			numposto = getnumposto(temp);
//			numfila = getnumfila(temp);
			numposto = temp->numposto;
			numfila = temp->numfila;

			printf("numero di fila: %d \n", numfila);
			printf("numero di posto: %d \n", numposto);
//			if (temp->occupato == false){
//				printf("il posto e' libero \n\n");
//			}
		}
	}

}
se anche cosi' non arriva alla fine, prova a commentare anche numfila e numposto, inizializzandoli PRIMA del ciclo. A questo punto se continua a terminare in maniera abnorme, lascerei perdere quell'ambiente.

Altra cosa: incrementa il livello dei warning fino al massimo, cioe' al livello piu' pedante possibile, cosi' da avere piu' informazioni su quanto sta succedendo...
Ho provato tutto, ma non c'è niente da fare.
Nessun warning compilando con -Wall.

Oggi pomeriggio cercherò un altro ide su cui emigrare

In ogni caso, grazie mille !
Vexem è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


vivo X200 FE: il top di gamma si è fatto tascabile? vivo X200 FE: il top di gamma si è fatto ...
TCL 65C7K, televisore Mini-LED di qualità, versatile e dal prezzo competitivo TCL 65C7K, televisore Mini-LED di qualità...
Fujifilm X-E5: la Fuji X che tutti gli appassionati volevano Fujifilm X-E5: la Fuji X che tutti gli appassion...
Recensione REDMAGIC 10S Pro: il gaming phone definitivo? Recensione REDMAGIC 10S Pro: il gaming phone def...
HPE Discover 2025: tra agenti intelligenti, infrastruttura AI-native e un futuro ibrido HPE Discover 2025: tra agenti intelligenti, infr...
Grok elogia Hitler e usa linguaggio estr...
Il braccio destro di Tim Cook lascia dop...
Proseguono gli studi su Dimorphos, l'ast...
Ad Arles torna FUJIKINA: evento dedicato...
Lucid Air è da record: percorsi o...
openSIL: la rivoluzione firmware di AMD ...
Synology annuncia due nuovi NAS: sono il...
HONOR Summer Sales: sconti fino al 45% s...
Futuro calo per le GeForce RTX 5000? Mic...
Luci e ombre sull'IA nella cybersecurity...
Samsung Unpacked, l'evento del 9 luglio ...
Lenovo in forte sconto per il Prime Day:...
Diesel Euro 5? Puoi guidarla ancora: ecc...
Aumenti di prezzo sproporzionati? Gli ut...
Il chip europeo che sfida i colossi amer...
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:48.


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