SEGMENTATION FAULT A RUN TIME

di il
8 risposte

SEGMENTATION FAULT A RUN TIME

Facendo il Debugging ho : Suspended Signal SIGSEGV : Segmantation Fault prima di entrare nella seguente funzione:

void prefilterCompilation(double** radius, double** theta, int cols , int rows);

Visto che rows e cols sono interi, l' errore dovrebbe essere sulle altre variabili, pero' non capisco in realtà cosa erro. Nel main:

double** radius, **theta;
...
raidus=(double**)malloc(sizeof(double*)*rows);
 for(int i=0;i<rows;i++)
  radius[i]=(double*)malloc(sizeof(double)*cols);

theta=(double**)malloc(sizeof(double*)*rows);
 for(int z=0;z<rows;z++)
  theta[z]=(double*)malloc(sizeof(double)*cols);
La cosa strana è che prima di effettuare delle modifiche a dei cicli for all interno di tale funzione, facendo il run potevo sia entrare che uscire da tale funzione. Modificando dei tali che non mi davano gli esatti risultati, mi si è bloccata l esecuzione prima d entrare.
Qualcuno capisce qual' è l' errore. Grazie

8 Risposte

  • Re: SEGMENTATION FAULT A RUN TIME

    for(int i=0;i<rows;i++);
    for(int z=0;z<rows;z++);
    ?Suonato l'allarme?
  • Re: SEGMENTATION FAULT A RUN TIME

    Se ti riferisci al secondo valore del for è scritto bene. Saluti
  • Re: SEGMENTATION FAULT A RUN TIME

    I punti virgola che ci fanno alla fine dei for?
  • Re: SEGMENTATION FAULT A RUN TIME

    Ah non li avevo proprio visti. In realtà nel programma non ci sono. In realtà mancano anche delle parentesi. Ho fatto degli errori a scrivere perche sto usando due pc. Corretto!
  • Re: SEGMENTATION FAULT A RUN TIME

    Cosa c'è tra quelle for e la chiamata della funzione?

    E come hai chiamato la funzione?
  • Re: SEGMENTATION FAULT A RUN TIME

    La funzione invocata è questa :
    In realtà originalmente avevo sbagliato i cicli for per costruire x e y. Fino ad allora potevo entrare ed uscire da questa funzione, pero' ovviamente c erano errori di calcoli. Dopo aver aggiustato i due for, non mi entrava piu nella funzione e con il debugging ho notato il segmentation fault.
    
    void pre_filter_Computations(double **radius,double **theta,int cols,int rows){
    
    double x[cols*2],y[rows*2];
    double X[cols][rows],
     Y[cols][rows];
    double epsilon=0.0001;
    
     printf("Entering prefilter function\n");
     
    for(int i=0;i<cols*2;i++){  
        x[i]=((double)(i-cols)/2/((double)cols/2; 
    }
    ...
    
    Dopo le malloc c' è direttamente l invocazione della funzione. Io ho sempre programmato in C e mai in C++. Ho visto che potrei usare vector<double> radius. Me lo sto studiando. Sto cercando di capire come assegnare a un vector i valori di una matrice bidimensionale
  • Re: SEGMENTATION FAULT A RUN TIME

    
    for(int i=0;i<cols*2;i++){  
        x[i]=((double)(i-cols)/2/((double)cols/2; 
    
    questo è sicuramente sbagliato,il vettore x è allocato come dimensione massima "cols" mentre il ciclo arriva fino a "cols*2",quindi esci dal vettore.
    
    ///oblivium
    for(int i=0;i<cols*2;i++){  
        x[i>>1]=((double)(i-cols) / 2.0 / ((double)cols / 2.0; 
    
  • Re: SEGMENTATION FAULT A RUN TIME

    Ho sbagliato a copiare correggo. x[cols*2] come y. Correggo. Comunque sto provando con vector.
    
    vector<double>x(cols*2);
    
    Nel main:
    
    vector<double>radius(rows*cols),theta(rows*cols);
    
    In questo modo pero' ho il problema quando dopo i due cicli che costruiscono il vector x e vector y devo effettuare il meshgrid. Perchè il meshgrid crea da due matrici unidimensionali 2 matrici bidimensionali.
Devi accedere o registrarti per scrivere nel forum
8 risposte