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

    allocazione dinamica matrice

    Ciao a tutti.

    Il mio problema è il seguente:
    -ho un file che contiene in ogni riga 3 numeri
    -il file ha n righe
    -voglio creare una matrice con 4 righe e n colonne (le prime 3 righe corrispondono ai valori del file, la quarta devo compilarla io opportunamente)

    Ho provato a scrivere :
    codice:
    #include<stdio.h>
     #include<stdlib.h> 
    #define NUM_DATI 4 
    /*prototipi*/ 
    int stampa_tot(FILE *ftpr); 
    void my_alloc(int *dati,int n); 
    void fill_vec(int **dati,int n,FILE *fptr); 
    
    /*main*/ 
    int main(int argc,char **argv){
     char *infile,*outfile;
     infile="connessioni.txt";
     outfile="rep_connessioni.txt"; 
    if(argc==3){
     infile=argv[1]; 
    outfile=argv[2]; } 
    FILE *inptr,*outptr; 
    if((inptr=fopen(infile,"r"))==NULL){
     printf("impossibile aprire il file %s in modalità read",infile); 
    exit(1); }
     if( (outptr=fopen(outfile,"w"))==NULL ){ 
    printf("impossibile aprire il file %s in modalità write",outfile);
     fclose(inptr); 
    exit(1); } 
    int num; 
    num=stampa_tot(inptr);
     printf("%d",num);
    int *dati[NUM_DATI];
    int i; 
    for(i=0;i<NUM_DATI;i++) my_alloc(dati[i],num);
     fill_vec(dati,num,inptr); 
    return 0; } 
    /*definizioni*/ 
    int stampa_tot(FILE *fptr){ 
    char buff[20]; 
    register int i=0; 
    while( (fgets(buff,sizeof(buff),fptr))!=NULL ){
     i++; } 
    rewind(fptr);
     return i; } 
    
    void my_alloc(int *colonna,int n){
     if((colonna=(int*)malloc((n+2)*sizeof(int)))==NULL){ 
    printf("errore nell'allocazione della memoria"); 
    exit(-1); }
     } 
    
    void fill_vec(int **dati,int n,FILE *fptr){ 
    char buff[20];
     register int i=0; 
    while( (fgets(buff,sizeof(buff),fptr))!=NULL && i<n ){ 
    sscanf(buff,"%d %d %d",&(dati[0][i]),&(dati[1][i]),&(dati[2][i])); i++; } 
    rewind(fptr); }
    Ma ottengo un errore di segmentation fault.
    Ho postato tutto il codice per chiarezza, ma l'errore deve essere nella:
    -my_alloc
    -fill_vec.

    Grazie per l'aiuto!

  2. #2
    Non è proprio un codice facile da interpretare..

    Prova a mettere:

    codice:
    int *dati[NUM_DATI];
    int i; 
    for(i=0;i<NUM_DATI;i++) my_alloc(dati[i],num);
    printf ("\nAllocazione avvenuta.");
     fill_vec(dati,num,inptr); 
    printf ("\nMatrice riempita.");
    Così almeno vedi dove va in segmentation!
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  3. #3
    Ho appena risolto, grazie.
    Ho semplicemente fatto restituire dalla my_alloc il puntatore colonna.

    PS il codice è illeggibile, ma prima che lo mettessi tra le stringhe CODE era indentato per bene!

  4. #4
    Originariamente inviato da franzSPECIAL
    Ho appena risolto, grazie.
    Ho semplicemente fatto restituire dalla my_alloc il puntatore colonna.

    PS il codice è illeggibile, ma prima che lo mettessi tra le stringhe CODE era indentato per bene!
    Ah ecco dov'era l'errore! Bè bravo che hai risolto!
    Comunque hai ragione il tag code incasina l'indentazione, ti consiglio di fare così: clicchi su "code", digiti solo "a" e fai ok... poi nel testo del messaggio, tra i tag [CODE], cancelli la "a" e incolli il tuo codice! Così dovrebbe mantenere l'indentazione!
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    I tag CODE mantengono sempre l'indentazione, a meno che non usi il tastino che c'è tra gli altri tag. Io li scrivo a mano e funziona sempre alla perfezione.
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

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.