Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

Discussione: [C++]Errore runtime

  1. #1

    [C++]Errore runtime

    Ciao a tutti ragazzi,
    vorrei chiedere se è possibile che un programma crashi solo a Runtime (se eseguo il debug tutto fila liscio). Sapreste dirmi anche quali possono essere le cause?
    Non vorrei riportare tutto il codice perché non è poco.
    Grazie in anticipo.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Può succedere che in debugging i motivi per cui avviene il crash siano "mascherati" dal diverso stato della memoria rispetto all'esecuzione in release.

    Cerca di circoscrivere la porzione del codice in cui avviene il crash e mostralo.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Con che compilatore/IDE stai lavorando?
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Penso che l' errore sia in questa parte:
    codice:
    case 1: {
                cin.ignore();
                char *parola = new char;
                cout << " Enter the word to encode: ";
                cin.getline(parola, 80);
                errore = false;
                char parolacodificata[strlen(parola)+1];
                int i;
                for(i=0; parola[i] != '\0' && !errore; i++) {
                    parolacodificata[i] = enigma->encodedKey(parola[i],errore);
                }
                parolacodificata[i] = '\0';
                cout << " Encoded word: ";
                if (!errore)
                    cout << parolacodificata << '\n' ;
                else cout << " Errore!\n";
                // se dealloco parola il debugger da' errori in assembler che non riesco a capire
                break;
                            }
    L' IDE è QtCreator e il compilatore è MinGw.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Sicuramente ... qui

    char *parola = new char;

    allochi un solo carattere e qui

    cin.getline(parola, 80);

    utilizzi il singolo carattere come se fossero 80 ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    lo pensavo pure io ma facendo delle prove, sorprendentemente mi memorizza tutta la stringa!

    Edit: in effetti però se lo "trasformo" in un vettore di char sembrerebbe funzionare...
    Allora sorge un' altra domanda: perché quando alloco un puntatore char a un singolo carattere mi memorizza tutta la stringa?

  7. #7
    La memorizza, ma va a sovrascrivere della memoria che non hai riservato, andando a "sporcare" le strutture dell'heap manager, da cui il crash. In debug sembra andare semplicemente perché sei fortunato - probabilmente l'heap lì è gestito in modo leggermente diverso.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da lovesemiramide
    lo pensavo pure io ma facendo delle prove, sorprendentemente mi memorizza tutta la stringa!
    Certamente ... il C non effettua controlli su dove scrive le stringhe ... se capita (per caso) che la memoria è allocata al processo, la utilizza (magari sporcando altre variabili), in caso contrario va in crash (e sei fortunato).

    E' un comportamento normale ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Grazie a tutti per la disponibilità!

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Figurati ...

    Il concetto importante da comprendere è che se mi servono 80 caratteri, devo allocare 80 caratteri (79 + il NUL finale). Qualsiasi altro modo di operare è comunque sbagliato.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.