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

    [C] access violation

    ciao a tutti.
    ho un altro quesito da porvi: ho creato un programma in c con visual studio che mi serve per generare dei problemi test ma quando lo eseguo in corrispondenza di una printf mi si apre una finestra in cui c'è scritto access violation.
    da cosa può dipendere questo errore?
    grazie in anticipo
    matteo

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se non mostri il codice e' molto difficile poterti rispondere ...

  3. #3
    questo è il codice del programma esecutivo.
    le funzioni e le strutture sono definite in due file a parte.
    l'errore "access violation" me lo da in corrispondenza della printf segnata con l'asterisco (fase di lettura e inizializzazione).


    codice:
    #include <stdlib.h>
    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    #include <time.h>
    #include <direct.h>
    
    #include "generator.h"
    
    int main(int argc, char *argv[])
    {
    	//inizializzazione puntatori
    	GENDIMDATA_PTR gendimdata_ptr = malloc(sizeof(GENDIMDATA));
    	LISTCOORD_PTR listcoord_ptr = malloc(sizeof(LISTCOORD));
    	NICONST_PTR consts_ptr = malloc(sizeof(NICONST));
    	NISIZE_PTR size_ptr = malloc(sizeof(NISIZE));
    	NIDATA_PTR data_ptr = malloc(sizeof(NIDATA));
    	
    	//I FASE: inizializzazioni e lettura
    
    	streama = malloc(sizeof(FILE));
    	if (argc == 2)
    	{
    	  strcpy(parameters_file, argv[1]);
    	}
     	
    	//lettura di genparameter.data
        gendimdata_ptr = read_genparameter(streama);
    
    	//creazione della struttura netinfo_const
    	consts_ptr = netinfoconst_create(gendimdata_ptr);
    	
        //assegnazione da input di NNODES;
    	printf("\nInsert the number of the nodes (NNODES):");
    	scanf("%d", &NNODES);
    	printf("\n");
    
    	//assegnazione da input del nome della directory di output
    	printf("\nInsert the name of the Output directory: ");
    	scanf("%s", &output);
    *	printf("\n");
    	output_dirname = &output;
    
        //II FASE: generazioni
    	
    	//inizializzazione della srand
    	srand((unsigned)time(NULL));
    
        //generazione di size.data (NNODES, COUPLE_NUM, POWERLEVELS_NUM, CAPACITYLEVELS_NUM)
        size_ptr = netinfosize_generation(NNODES, gendimdata_ptr);
    
    	//funzione che alloca e genera netdata
        data_ptr = generate_netdata(consts_ptr, size_ptr, gendimdata_ptr, listcoord_ptr); 
    
        //allocazione per la struttura netinfo.data (dopo aver generato size.data)
    	//data_ptr = allocate_netdata(size_ptr);
    
        //generazione di nodes.data (ncoord_mtx, powercost_array, normconst_mtx, sigma_array)
        //data_ptr = nodes_generation(NNODES, data_ptr, consts_ptr, gendimdata_ptr);  
      
        //generazione routing.data
        //data_ptr = routing_array_generation(NNODES, data_ptr, size_ptr, gendimdata_ptr);
    
        //generazione di cappowlevels.data
       	//data_ptr = powerlevel_array_generation(data_ptr, size_ptr, gendimdata_ptr);
    	//data_ptr = capacitylevel_array_generation(data_ptr, size_ptr, gendimdata_ptr);
           
    	//creazione directory di output
    	_mkdir(output_dirname);
    
    	free(gendimdata_ptr);
    	free(listcoord_ptr);
    	    
      
        //III FASE: scrittura
    
    	sprintf(constants_filename, CONSTANTS_FORMATSTR, output_dirname);
    
        //scrittura del file constants.data
    	write_constants_data(constants_filename, consts_ptr);
    
    	sprintf(sizes_filename, SIZES_FORMATSTR, output_dirname);
    
        //scrittura del file size.data
    	write_sizes_data(sizes_filename, size_ptr);
    
    	sprintf(nodes_filename, NODES_FORMATSTR, output_dirname);
    
        //scrittura del file nodes.data
    	write_nodes_data(nodes_filename, NNODES, data_ptr);
    
    	sprintf(routing_filename, ROUTING_FORMATSTR, output_dirname);
    
        //scrittura del file routing.data
        write_routing_data(routing_filename, data_ptr, size_ptr);
    
    	sprintf(cappowlevels_filename, CAPPOWLEVELS_FORMATSTR, output_dirname);
    
        //scrittura del file cappowlevels.data
    	write_cappowlevels_data (cappowlevels_filename, data_ptr, size_ptr);
    
    	free(consts_ptr);
    	free(size_ptr);
    	free(data_ptr);
    
    	return 0;
    }

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La printf non puo' essere la causa del problema.
    C'e' da concentrarsi su quanto c'e' prima e dopo

    scanf("%s", &output);
    * printf("\n");
    output_dirname = &output;


    in particolare le variabili output e output_dirname ... dove e come sono dichiarate ?

  5. #5
    innanzitutto vorrei ringraziarti per il tuo interessamento
    appresso c'è il file dove ho dichiarato le strutture e le variabili globali come output_dirname e output.
    spero che tu possa capirci qualcosa.




    codice:
    /*********************************************************
    generator.h: complex type definitions and functions
    
    **********************************************************/
    
    #ifndef GENERATOR_HEADER
    #define GENERATOR_HEADER
    
    /*********************************************************
    Constants Definition
    **********************************************************/
    
    #define CONSTANTS_FORMATSTR	     "%s\\constants.data"
    #define SIZES_FORMATSTR		     "%s\\sizes.data"
    #define NODES_FORMATSTR		     "%s\\nodes.data"
    #define ROUTING_FORMATSTR	     "%s\\routing.data"
    #define CAPPOWLEVELS_FORMATSTR   "%s\\cappowlevels.data"
    
    /*********************************************************
    Global Variables Definiton
    **********************************************************/
    
    int NNODES;
    
    FILE *streama;
    
    char constants_filename[100],
         sizes_filename[100], 
         nodes_filename[100], 
         routing_filename[100], 
         cappowlevels_filename[100];
    char *output_dirname;
    char output;
    char parameters_file[60];
    int argc;
    char* argv;
    
    char commento[1024];
    
    /*********************************************************
    Complex Type Definition
    **********************************************************/
    
    struct gendimension_data
    {
      double delta;
      double W;
      double radius;
      double lambda;
      double netdia;
      int max_levelnum;
      double max_power;
      double min_power;
      double max_capacity;
      double min_capacity;
      double max_powercost;
      double min_powercost;
      float max_penalty;
      int max_ratequantity;
    };
    
    typedef struct gendimension_data GENDIMDATA;
    typedef GENDIMDATA* GENDIMDATA_PTR;
      
    
    //lista delle coordinate
    struct listcoord
    {
      double ascissa;
      double ordinata;
      struct listcoord* listcoordptr;
    }listcoord;
    
    typedef struct listcoord LISTCOORD;
    typedef LISTCOORD* LISTCOORD_PTR;
    
    
    // struttura path
    struct path
    {
      int source;
      int destination;
      int length;
      float penalty;
      int rate_quantity;
      int n_path;
    }routing;
    
    typedef struct path PATH;
    
    
    //constants
    struct netinfo_const 
    {
      double delta;
      double W;
      double radius;
      double lambda;
      double netdia; // Network Diameter
    };
    
    typedef struct netinfo_const NICONST;
    typedef NICONST* NICONST_PTR;
    
    //size
    struct netinfo_size 
    {
      int NNODES;
      int COUPLE_NUM;
      int POWERLEVELS_NUM;
      int CAPACITYLEVELS_NUM;
    };
    
    typedef struct netinfo_size NISIZE;
    typedef NISIZE* NISIZE_PTR;
    
    //data
    struct netinfo_data
    {
      double** ncoord_mtx;
      PATH* routing_array;
      double* powercost_array;
      double** pathcouple_mtx;
      double* powerlevel_array;
      double* capacitylevel_array;
      double** normconst_mtx;
      double* sigma_array;
    };
    
    typedef struct netinfo_data NIDATA;
    typedef NIDATA* NIDATA_PTR;
    
    
    /*********************************************************
    List of Functions
    **********************************************************/
    
    //FUNZIONI DI INIZIALIZZAZIONE E DI LETTURA
    
    //funzione che legge genparameter.data
    GENDIMDATA_PTR read_genparameter(FILE* streama);
    
    //funzione che inizializza la lista delle coordinate
    LISTCOORD_PTR listcoord_init();
    
    //funzione che alloca la struttura netinfo.data
    //NIDATA_PTR allocate_netdata(NISIZE_PTR size);
    
    
    //FUNZIONI DI GENERAZIONE
    
    //funzione che genera (pseudo)casualmente un numero intero compreso tra 0 e RAND_MAX
    int random();
    
    //funzione che crea la struttura netinfo_costs (delta, W, radius, lambda, netdia)
    NICONST_PTR netinfoconst_create(GENDIMDATA_PTR gendimdata_ptr);
    
    //funzione che genera di size.data(NNODES, COUPLE_NUM, POWERLEVELS_NUM, CAPACITYLEVELS_NUM (3 int)
    NISIZE_PTR netinfosize_generation(int NNODES, GENDIMDATA_PTR gendimdata_ptr);
    
    //funzione che genera una coppia di coordinate comprese tra 0 e max_dim
    LISTCOORD_PTR ncoord_couple_generation(NICONST_PTR const_ptr);
    
    //funzione che inserisce le coordinate nella lista controllando la sovrapposizione e l'isolamento
    LISTCOORD_PTR ncoord_insert(LISTCOORD_PTR listcoord_ptr, LISTCOORD_PTR newlistcoord_ptr, NICONST_PTR consts_ptr);
    
    //funzione che alloca e genera netdata
    NIDATA_PTR generate_netdata(NICONST_PTR consts, NISIZE_PTR size, GENDIMDATA_PTR gendimdata_ptr, LISTCOORD_PTR new_list_coord); 
    
    //funzione che genera di nodes.data (ncoord_mtx, powercost_array, normconst_mtx, sigma_array)
    //NIDATA_PTR nodes_generation(int NNODES, NIDATA_PTR data_ptr, NICONST_PTR consts_ptr, GENDIMDATA_PTR gen_ptr);
     
    //funzione di generazione di powerlevel_array
    //NIDATA_PTR powerlevel_array_generation(NIDATA_PTR data, NISIZE_PTR size, GENDIMDATA_PTR gendimedata_ptr);
    
    //funzione di generazione di capacitylevel_array
    //NIDATA_PTR capacitylevel_array_generation(NIDATA_PTR data, NISIZE_PTR size, GENDIMDATA_PTR gendimedata_ptr);
    
    //generazione routing.data
    //NIDATA_PTR routing_array_generation(int NNODES, NIDATA_PTR data, NISIZE_PTR size, GENDIMDATA_PTR gendimdataptr);
    
    
    //FUNZIONI DI SCRITTURA
    
    //scrittura del file constants.data
    int write_constants_data(char* filename, NICONST_PTR consts_ptr);
    
    //scrittura del file sizes.data
    int write_sizes_data(char* filename, NISIZE_PTR size);
    
    //scrittura del file nodes.data
    int write_nodes_data(char* filename, int NNODES, NIDATA_PTR data);
    
    //scrittura del file routing.data
    int write_routing_data(char* filename, NIDATA_PTR data, NISIZE_PTR size);
    
    //scrittura del file cappowlevels.data
    int write_cappowlevels_data (char* filename, NIDATA_PTR data, NISIZE_PTR size);
    
    #endif

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E' ovvio che hai quell'errore ...

    Se hai dichiarato output come variabile char, non puoi pretendere che c'entri piu' di un carattere!

  7. #7
    grazie, l'errore era veramente banale!!!

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.