Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    5

    .exe funziona solo dopo averlo lanciato due volte

    Buona sera a tutti,
    ho un problema lanciando un eseguibile compilato con DEV-C++ 4.9.9.2 sul prompt dei comandi di windows 7.
    Lanciando questo file (che, per inciso, prende in input da riga di comando anche un nome di un file da aprire) la prima volta appena aperto il prompt non mi funziona MAI, ma da' la finestra di errore "Programma.exe ha smesso di funzionare, termina processo".
    La cosa curiosa è che lanciando lo stesso identico .exe una seconda volta funziona senza problemi.
    Al suo interno crea almeno due file di output, possono essere questi a creare problemi?
    Sapete dirmi da cosa può dipendere e come posso ovviare?

    Grazie in anticipo per la risposta

    PS
    Si spera che prima o poi questo programma funzioni anche su altre macchine e magari richiamato da programmi terzi, quindi più è affidabile meglio è

  2. #2
    Converrai che senza vedere il codice sorgente è nolto difficile scoprire il problema
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    5
    convengo, però è un codicione bello lungo e penso sia poco utile condividerlo tutto (sono più di 600 righe).
    Però sono quasi sicuro che sia un problema "di base", perchè per quanto lo modifichi il problema resta ed è sempre legato al primo lancio. Anche se poi modifico il sorgente e lo ricompilo runna senza problemi a patto che non chiuda e riapra il prompt.
    Mando comunque la parte clou del programma, ma dubito che possa essere utile (casoII è una funzione descritta altrove)



    \code


    int main(int argc, char *argv[])
    {
    FILE *f,*g;
    char format[3],fourtytwo[3];
    int offset;


    if (argc<2) {
    printf("\n Inserire il file da comprimere! \n");
    return -1;}
    //apri il file da leggere e quello da scrivere
    f=fopen(argv[1],"rb");
    if (f==NULL){
    printf("\n File non trovato! \n");
    return -1;}


    if(strcmp(format,"II")==0){
    printf("e' intel tiff\n");
    g=fopen("risultato.bmp","wb");
    if (g==NULL){
    printf("\n Errore nell'apertura del file \n");
    return -1;}
    casoII(f,g);
    }

    \end code

  4. #4
    Sembra che tu passi alla strcmp su una stringa non inizializzata
    prova con
    codice:
    char format[3]="",fourtytwo[3]="";
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    5
    Ti ringrazio per la dritta, era causa di un problema più a valle nel programma.
    Però stavolta non c'entra, perchè ho semplicemente cancellato per errore la parte

    fread(format, sizeof(char), 2, f);
    fread(fourtytwo, sizeof(char), 2, f);
    fread(&offset, sizeof(char), 4, f);
    fseek(f,0,SEEK_SET);
    printf("%s\n",format);

    che però nel programma esiste.

    Ho circoscritto il problema alla funzione che allego. Si blocca quando deve partire lei (sempre solo al primo run della sessione)

    \code

    #include <stdio.h>


    //MATRIX FUNCTIONs
    short int** CreateMatrix(int lines, int rows, int BitPerSample){
    short int **M;
    int i;
    if(BitPerSample/8!=2){printf("NOT YET IMPLEMENTED\n");}
    M = (short int**)malloc(lines*sizeof(short int*));
    for (i = 0; i < rows; i++){
    M[i] = (short int*)malloc(rows*sizeof(short int));
    }
    return M;
    }


    \end code
    Ultima modifica di Fil1988; 02-01-2015 a 20:02

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    5
    più precisamente, si blocca al ciclo for dopo aver assegnato con la malloc 495 vettori su 650, mistero totale!!!
    Ah scusa se sono ripetitivo, ma ovviamente lanciandolo la seconda volta procede normale!
    Ultima modifica di Fil1988; 02-01-2015 a 20:26

  7. #7
    Credo proprio che il problema non è neanche nella funzione CreateMatrix

    Cerca di isolare la porzione di codice che crea il problema, e crea un semplice programma che possa riprodurre il malfunzionamento
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    5
    E' strano, ma ho risolto.
    Ho isolato varie porzioni di programma come mi avevi suggerito, ma tutte sembravano girare senza problemi. Poi mi sono accorto che il createMatrix che ho postato ha un piccolo errore concettuale: il ciclo for (i = 0; i < rows; i++) dovrebbe essere for (i = 0; i < lines; i++).
    Corretto questo non ho più avuto problema.
    Me la sono spiegata in questo modo: Penso che la prima volta che parta l'exe la memoria allocata per la matrice si trovi per qualche motivo prima di altre variabili dello stesso programma ed è normale che quando sconfinavo per riempire la matrice negli spazi non correttamente allocati andassi a cancellare variabili utili al programma. Con il secondo run la memoria allocata per qualche ragione cambia (forse perchè il programma si bloccava prima di "free(M)"?) e pertanto il problema non appariva più.
    Qualsiasi spiegazione più affidabile è bene accetta!
    per ora sono contento che non si manifesta più il problema, se dovesse ricomparire vi farò sapere.
    Grazie Samuele per l'apporto!

  9. #9
    Si hai ragione, lo scambio lines/rows era senz'altro la causa del problema
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.