Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    43

    segmentation fault c

    Salve a tutti, sto scrivendo un programma in C per risolvere un sistema di equazioni (triangolare superiore) con il metodo di sostituzione all' indietro.
    Senza entrambe le righe sottolineate ho nel debug un segmentation fault, decommentandole il compilatore non protesta(a me non servono).perchè? ecco il code :

    #include <stdio.h>
    #include <stdlib.h>

    int main(int argc,char* argv[]){

    char name[256] = {0};
    FILE *fp = NULL;
    int* matrixstorage;
    int** matrix;
    int* solution;
    int rows;
    int columns;
    int numelements;
    int i;
    int j;
    int k=0;

    if (argc != 2){
    printf("Digitare il percorso del file contenente il sistema");
    }


    fp = fopen(argv[1], "r");
    fscanf(fp,"%d",&rows);
    fscanf(fp,"%d",&columns);
    numelements = (((rows*columns)/2)+rows);
    matrixstorage = (int*)malloc((rows*((columns)/2)+rows)*sizeof(int));
    matrix = malloc(rows*sizeof(int*));
    solution = malloc(rows*sizeof(int*));
    for(i = 0;i<rows;i++){
    matrix[i]=&matrixstorage[k];
    k=k+columns-i;
    //matrix[i]=&matrixstorage[i*(n+1)];
    }
    for(i = 0;i<numelements;i++){
    fscanf(fp,"%d",matrixstorage+i);
    //int value=(*(matrixstorage+i));
    //printf("%d ",*(matrixstorage+i));


    }
    system("PAUSE");
    }

  2. #2
    Cosa contiene il file che apri con il programma (a parte le dimensioni della matrice) puoi riportare un esempio.
    matrix è un vettore di puntatori a puntatori a intero, e in questo modo
    codice:
    	matrix = malloc(rows*sizeof(int*));
    Allochi spazio per il numero di righe rows.
    Dovresti però allocare, per ogni riga, anche la memoria per le colonne 'columns'.

    Ho notato che dichiari solution come vettore di puntatori a intero e poi non lo utilizzi.
    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
    Feb 2005
    Messaggi
    43
    Grazie mille ma fortunatamente ho risolto , avevo sbagliato a calcolare il numero di elementi della matrice del sistema. Il file contiene come primo elemento sulla prima riga il numero di righe del sistema e come primo elemento della seconda riga il numero di colonne del sistema.
    Le righe successive contengono gli elementi del sistema triangolare.matrixstorage contiene in un vettore gli elementi del sistema, matrix è la matrice che punta al contenuto di matrixstorage. Se vi interessa ecco il code esatto :

    #include <stdio.h>
    #include <stdlib.h>

    int main(int argc,char* argv[]){

    char name[256] = {0};
    FILE *fp = NULL;
    float* matrixstorage;
    float** matrix;
    float* solution;
    int rows;
    int columns;
    int numelements;
    int i;
    int j;
    int k=0;

    if (argc != 2){
    printf("Digitare il percorso del file contenente il sistema");
    }


    fp = fopen(argv[1], "r");
    fscanf(fp,"%d",&rows);
    fscanf(fp,"%d",&columns);
    numelements = (((rows*columns)/2)+rows);
    matrixstorage = malloc(numelements*sizeof(float));
    matrix = malloc(rows*sizeof(float*));
    solution = malloc(rows*sizeof(float));

    for(i = 0;i<rows;i++){
    matrix[i]=&matrixstorage[k];
    k=k+columns-i;
    }

    for(i = 0;i<numelements;i++){
    fscanf(fp,"%f",matrixstorage+i);

    }


    for(i=rows-1;i>=0;i--){
    solution[i]=matrix[i][rows-i]/matrix[i][0];
    //printf("%d \n",solution[i]);
    for(j=0;j<i;j++){

    matrix[j][rows-j]=matrix[j][rows-j]-(matrix[j][i-j]*solution[i]);

    }

    }

    for(i=0;i<rows;i++){
    printf("Solutions %d: \n",i);
    printf("%f \n",solution[i]);
    }


    system("PAUSE");
    return 0;
    }

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.