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

    Problema con funzione void

    Ragazzi sto sbattendo la testa a causa di un problema davvero strano, che non mi so proprio spiegare. Ecco il codice intanto:

    codice:
    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    #include <stdlib.h>
    
    #define SET_FILE "training_set.txt"
    
    FILE *fp;
    
    //Numero elementi
    int N_IN=2;
    int N_H=2;
    int N_O=1;
    int N_ES=4;
    
    //Elementi
    float *neur_in;
    float *w_in_hid;
    float *neur_hid;
    float *w_hid_out;
    float *neur_out;
    float var_w;
    
    //Esempi
    float *es_in;
    float *es_out;
    
    float sig(float x){
    	return 1/(1+pow(M_E,-x));
    }
    
    void alloca_obj(){
    	neur_in=malloc(N_IN*sizeof(float));
    	w_in_hid=malloc(N_IN*N_H*sizeof(float));
    	neur_hid=malloc(N_IN*sizeof(float));
    	w_hid_out=malloc(N_IN*N_O*sizeof(float));
    	neur_out=malloc(N_IN*sizeof(float));
    	es_in=malloc(N_ES*N_IN*sizeof(float));
    	es_out=malloc(N_ES*N_O*sizeof(float));
    }
    
    void att_to_zero(){
    int i;
    
    	for(i=0;i<N_H;i++){
    		neur_hid[i]=0;
    		}
    	for(i=0;i<N_O;i++){
    		neur_out[i]=0;
    		}
    }
    
    void output(){
    int i, j;
    	
    	att_to_zero();
    	
    	for(i=0;i<N_IN;i++){
    		for(j=0;j<N_H;j++){
    			neur_hid[j]+=neur_in[i]*w_in_hid[N_H*i+j];
    		}
    	}
    	
    	for(i=0;i<N_H;i++){
    		for(j=0;j<N_O;j++){
    			neur_out[j]+=neur_hid[i]*w_hid_out[N_O*i+j];
    		}
    	}
    }
    
    void w_to_zero(){
    int i;
    	for(i=0;i<N_IN*N_H;i++){
    		w_in_hid[i]=1;
    	}
    	for(i=0;i<N_H*N_O;i++){
    		w_hid_out[i]=1;
    	}
    }
    
    void read_training_set(){
    int i, j, lines=2*N_ES;
    
    	for(i=0;i<lines;i++){
    		if(((int)i+1)/2<((float)i+1)/2){
    			for(j=0;j<N_IN;j++){
    				fscanf(fp, "%f\t", &es_in[N_IN*i+j]);
    				printf("%f\t", es_in[N_IN*i+j]);
    			}
    		}else{
    			for(j=0;j<N_O;j++){
    				fscanf(fp, "%f\t", &es_out[N_O*i+j]);
    				printf("%f\n", es_out[N_O*i+j]);
    			}
    		}
    	}
    }
    
    int main(){
    int i, j;
    
    fp=fopen(SET_FILE, "r");
    
    	alloca_obj();
    	
    	read_training_set();
    	
    	w_to_zero();
    	
    	output();
    	
    fclose(fp);
    	
    return 0;
    }
    Il file training_set.txt è questo:

    1 2
    3
    4 5
    9
    12 1
    13
    9 83
    92

    Il problema sta, almeno così mi pare di capire, nella funzione "read_training_set()". Se eseguo il programma, i valori del file testuale training_set.txt vengono letti tutti esattamente, e vengono anche stampati a schermo, così come desidero. Ma appena finisce di stamparli mi salta fuori l'avviso di windows che mi dice che il programma a smesso di funzionare, mi va in crash praticamente. La cosa mi sembra molto strana, e non capisco il motivo. Cioè, i valori letti dal file di testo vengono stampati tutti a schermo, e una volta fatto questo la funzione read_training_set dovrebbe concludere, ma proprio mentre si conclude, mi va in crash il programma. Capisco che il problema sta in questa funzione perché se nel main non ce la metto il programma non va in crash. Vi prego di aiutarmi, sto per prendere a craniate il monitor.

  2. #2
    Novità... XD
    Se nella funzione "alloca_obj" aggiungo 1 agli array es_in e es_out il programma non va più in crash. Non so se questa sia la soluzione giusta, e comunque mi sarebbero utili dei chiarimenti...

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,482

    Moderazione

    Originariamente inviato da web_pirate
    Ragazzi sto sbattendo la testa a causa di un problema davvero strano, che non mi so proprio spiegare. Ecco il codice intanto [...]
    Ho modificato il messaggio originale inserendo la formattazione del codice tramite il tag apposito [CODE]: in futuro provvedi tu, come da Regolamento.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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