Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Zenfone 11 Ultra: il flagship ASUS ritorna a essere un 'padellone'
Recensione Zenfone 11 Ultra: il flagship ASUS ritorna a essere un 'padellone'
Zenfone 11 Ultra ha tantissime qualità interessanti, fra cui potenza da vendere, un display di primissimo livello, un comparto audio potente e prestazioni di connettività fra le migliori della categoria. Manca però dell'esclusività del predecessore, che in un settore composto da "padelloni" si distingueva per le sue dimensioni compatte. Abbiamo provato il nuovo flagship ASUS, e in questa recensione vi raccontiamo com'è andata.
Appian: non solo low code. La missione è l’ottimizzazione dei processi con l'IA
Appian: non solo low code. La missione è l’ottimizzazione dei processi con l'IA
Abbiamo partecipato ad Appian World 2024, evento dedicato a partner e clienti che si è svolto recentemente nei pressi di Washington DC, vicino alla sede storica dell’azienda. Nel festeggiare il 25mo anniversario, Appian ha annunciato diverse novità in ambito intelligenza artificiale
Lenovo ThinkVision 3D 27, la steroscopia senza occhialini
Lenovo ThinkVision 3D 27, la steroscopia senza occhialini
Primo contatto con il monitor Lenovo ThinkVision 3D 27 che grazie a particolari accorgimenti tecnici riesce a ricreare l'illusione della spazialità tridimensionale senza che sia necessario utilizzare occhialini
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


Recensione Zenfone 11 Ultra: il flagship ASUS ritorna a essere un 'padellone' Recensione Zenfone 11 Ultra: il flagship ASUS ri...
Appian: non solo low code. La missione è l’ottimizzazione dei processi con l'IA Appian: non solo low code. La missione è ...
Lenovo ThinkVision 3D 27, la steroscopia senza occhialini Lenovo ThinkVision 3D 27, la steroscopia senza o...
La Formula E può correre su un tracciato vero? Reportage da Misano con Jaguar TCS Racing La Formula E può correre su un tracciato ...
Lenovo LEGION e LOQ: due notebook diversi, stessa anima gaming Lenovo LEGION e LOQ: due notebook diversi, stess...
AMD, emergono presunte specifiche della ...
CPU AMD EPYC 4004 compatibili con socket...
Intel incolpa i produttori di schede mad...
MSI: poche schede video Radeon? Al momen...
X-Apply: se non riesci a mettere la past...
Termostato intelligente Tado e teste ter...
Progetti sempre più avanzati, com...
AMD Ryzen Strix Halo: le prossime APU mo...
Google Pixel 8 256GB 649€, iPad 399€ e a...
Sono i migliori PC portatili tuttofare s...
Super prezzi Motorola: G84 5G 12GB/256GB...
eFootball taglia il traguardo dei 750 mi...
MS-DOS 4.0 diventa open source: Microsof...
Micron riceverà 6,1 miliardi di d...
STALKER 2 Heart of Chornobyl: nuovo trai...
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: 22:41.


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