Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [c++] Il programma crasha

    ciao ragazzi,

    mi sono da poco riavvicinato al mondo del c++ dopo anni che non facevo nulla (prima non è che facessi granchè, solo un corso universitario). Ho creato questo codice che vi posto di seguito, compila senza problemi, il problema è che avviato l'exe crasha. Per l'esattezza va in crash dove ho sottolineato il codice (cioè il secondo puntatore di quella lista di definizioni) e succede a prescindere dall'ordine con cui li dichiaro ( cioè sempre al secondo)
    mi date una mano ?? grazie !!

    codice:
    #include <iostream>
    #include <fstream>
    #include <cmath>
    #include <vector>
    
    using namespace std;
    
    class pianeta
        {
            public:
            double massa;
            double velx, vely;
            double xi, yi;        
            double inserisci_massa( );
            double inserisci_vel( );
            double inserisci_cin( );
    
        };
    
    
    
        double pianeta::inserisci_massa( )
        {
            cout << "inserire la massa del pianeta" << endl;
            cin >> massa;
            cout << endl;
        }
        
        double pianeta::inserisci_vel( )
        {
            cout << "il modulo della velocita' " << endl;
            double modvel;
            cin >> modvel;
            cout << "inserire l'angolo che la velocita' forma con l'asse X " << endl;
            double angvel;
            cin >> angvel;
            velx = cos(angvel*3.14/180)*modvel;
            vely = sin(angvel*3.14/180)*modvel;
        }
        
        double pianeta::inserisci_cin( )
        {
            cout << "inserire la X iniziale" << endl;
            cin >> xi;
            cout << "inserire la Y iniziale" << endl;
            cin >> yi;
        }
    
    int main()
    {
        
    const double massa_sole=500000;
    const double costante_grav=6.67*pow(10,-11);
    const double intervallo=0.01;
    
    ofstream output;
    output.open("evoluzione_pianeti.txt");
    
    
    
    pianeta ttt;
    ttt.inserisci_massa( );
    ttt.inserisci_vel();
    ttt.inserisci_cin( );
    
    cout << "la massa del pianeta e' " << ttt.massa << endl;
    double vel = sqrt(pow(ttt.velx,2)+pow(ttt.vely,2));
    cout << "la velocita' iniziale e' " << vel << endl;
    cout << "la posizione iniziale del pianeta e' (" << ttt.xi << "," << ttt.yi << ")" << endl;
    cout << "quante iterazioni vuoi che faccia (int) ? " << endl;
    cout << "vx" << ttt.velx << "vy" << ttt.vely << endl;
    
    double *pvelx=NULL;
    *pvelx=ttt.velx;
    
    
    
    double iterazioni;
    cin >> iterazioni;
    
    double *pvely=NULL;
    *pvely=ttt.vely;
    
    
    
    
    
    double angi=acos((ttt.xi)/(sqrt(pow(ttt.xi,2)+ pow(ttt.yi,2))));
    double *pang=NULL;
    *pang = angi;
    
    
    
    double *pxi=NULL;
    double *pyi=NULL;
    *pxi=ttt.xi;
    *pyi=ttt.yi;
    
    
    
    double xt, yt, angt, x, velox, y, veloy, ang, vyt, vxt;
    
    for(int i=1; i<iterazioni; i++)
    {
        
    x=*pxi;
    velox=*pvelx;
    ang=*pang;
    
    y=*pyi;
    veloy=*pvely;
    
    
    
    xt=x+velox*0.01+((massa_sole)/(2*(pow(x,2)+pow(y,2))))*cos(ang*3.14/180)*0.0001;
    yt=y+veloy*0.01+((massa_sole)/(2*(pow(x,2)+pow(y,2))))*sin(ang*3.14/180)*0.0001;
    
    vxt=velox+((massa_sole)/(pow(x,2)+pow(y,2)))*cos(ang*3.14/180)*0.01;
    vyt=veloy+((massa_sole)/(pow(x,2)+pow(y,2)))*sin(ang*3.14/180)*0.01;
    
    angt=acos(xt/(sqrt(pow(xt,2)+pow(yt,2))));
    
    output << xt << "   " << yt << endl;
    
    *pxi=xt;
    *pyi=yt;
    *pvelx=vxt;
    *pvely=vyt;
    *pang=angt;
    
    }
    
    
    output.close();
    return 0;
    
    }

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Perché vuoi assegnare un double a un puntatore nullo?
    codice:
    double *pvelx=NULL;
    *pvelx=ttt.velx;
    E continui a farlo qua e la?
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

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

    codice:
    double *pvelx=NULL;
    *pvelx=ttt.velx;
    sono evidentemente sbagliate e creano un crash
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    a dire la verità all'inizio non avevo inizializzato a NULL, l'ho fatto dopo per vedere se il problema si risolveva in preda alla disperazione ! quindi in realtà crasha anche senza =NULL. la cosa strana appunto è che in realtà crasha dopo la prima di quelle inizializzazioni, invertendo l'ordine crasha sempre dopo aver fatto la prima ( con soccesso, controllata con un cout ). help ! hehee


    Originariamente inviato da oregon
    Beh ... queste

    codice:
    double *pvelx=NULL;
    *pvelx=ttt.velx;
    sono evidentemente sbagliate e creano un crash
    E come dovrei fare ? per esser sicuro di non dirvi una stupidaggine ho ricompilato senza i =NULL ed è come vi dicevo, cioè stesso problema.

    Nicola

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E' ovvio che crasha anche senza NULL, perché il puntatore avrebbe valore non definito (e quindi sbagliato).

    Probabilmente devi rivedere l'uso dei puntatori ...

    Se vuoi usarlo, devi allocare uno spazio di memoria adeguato e assegnarne l'indirizzo al puntatore.

    Manca dunque l'allocazione di tale spazio.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Originariamente inviato da oregon
    E' ovvio che crasha anche senza NULL, perché il puntatore avrebbe valore non definito (e quindi sbagliato).

    Probabilmente devi rivedere l'uso dei puntatori ...

    Se vuoi usarlo, devi allocare uno spazio di memoria adeguato e assegnarne l'indirizzo al puntatore.

    Manca dunque l'allocazione di tale spazio.

    Ti ringrazio, ora ho capito meglio e riesco a farlo andare !! Spero di poter contare su di voi se avessi ( e li avrò ) altri problemi anche con altri programmi

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.