Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    348

    [C] Segmentation fault strano(almeno per me)

    ciao!

    non riesco a capire quando mi viene lanciato un segmentation fault
    il codice del programma e' questo:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <mysql/mysql.h>
    
    
    
    #define CTRLCODC  "SELECT * FROM Corsi  Where id_Corso = '%s';"
    
    const char* host = "localhost"; // host di connessione
    const char* database = "SIS";  // database di connessione
    const char* db_user = "matteo"; // nome utente per la connessione
    const char* db_pass = "Esedra#84"; // password non cifrata
    #define INSSTU    "INSERT INTO `Studenti` ( `Matricola` , `Nome_S` , `Cognome_S` , `email_s` , `Telefono_S` , `Pin Uni` , `Codice Sms` , `Indirizzo` , `Abbonato` )VALUES ('505013', 'Michele', 'Trevi', 'ssss@gmail.com', '3402313133', '234312', '324153', 'via pino', '0'); "
    int collegmanetoDB(MYSQL *  mysql ){
    
       if (! mysql_init (mysql)) {
                    printf ("Errore nella allocazione di memoria.\n");
                    
    		return -1;
            }
    
            if (! mysql_real_connect (mysql, host, db_user, db_pass, "",0, NULL, 0)) {
                    printf ("Errore nella connessione.\n");
                    
    		return -2;
            }
    	
    	if (mysql_select_db (mysql, database)) {
                    printf ("Errore nella selezione del database.\n");
                    return -3;
            
            }	
    	return 0;
    
    }
    
    
    
    
    
    int main ()
    {
            MYSQL *  mysql;
        
            int i = 0, j = 0 ;
    	char c[10] ;
    	char * query;
    	char query1[100]; 
    	strcpy(c  , "10001");
          
           
    	query = malloc ( 255 * strlen(INSSTU));
    	query = INSSTU;
    	
    	printf("%s\n" , query );
    	
    	if(collegmanetoDB( mysql ) != 0){
    	  /*  printf("Errore di qualcosa!!%d" , err);*/
    	  return -1;
    	}
           
               
    // esegue la query
            if (mysql_query (mysql, query)) {
                    printf("Errore nella query.\n");
                    printf("%s" , mysql_error (mysql));
    	        mysql_close (mysql);
    		return -1;
            }
           
    
    
    
    
    
    	// chiude le risorse
            mysql_close (mysql);
    
            exit (EXIT_SUCCESS);
    	return 0;
    }

    e per adesso nessun problema!
    ma se la funzione main la vado a chiamare "ehi" e la lancio da un main che si trova sempre nello stesso file
    codice:
    codice:
    int main(){
    
      int  k;
      
      k = ehi();
      printf("%d" , k);
      return 0;
    e mi da' segmentation faulte! ma non capisco il perche'!!!

    ciao grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Tanto per cominciare perche' fai la

    exit (EXIT_SUCCESS);

    se dopo esegui il return?

    Io direi che la exit va eliminata ...

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    348
    Ops!!!!!


    pero' il problema rimane!!

    potrebbe essere un problema del puntatore * mysql??pero non credo perche' altrimenti non andrebbe con la versione "1"!

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    348
    se ti puo interessare questo e' quello che mi dice il debugger!

    collegmanetoDB (mysql=0x8048515) at provaI.c:16
    16 if (! mysql_init (mysql)) {
    (gdb) step

    Program received signal SIGSEGV, Segmentation fault.
    0xb7d3e048 in memset () from /lib/tls/libc.so.6

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    A parte il fatto che il nome della funzione "collegmanetoDB" dovrebbe essere corretta in "collegamentoDB" (ovviamente questo e' un semplice dettaglio ...), il problema mi sembra che risieda nel puntatore

    MYSQL * mysql;

    che nel main passate alla funzione suddetta.

    Ma quel puntatore non viene mai allocato nel main ...

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    348
    forse mi ero spiegato male ti riscrivo il codice:

    codice:
    int prova (){
            
    
            MYSQL * mysql;
            int i = 0, j = 0 ;
    	char * query;
    	char query1[100]; 
           
          
           
    	query = malloc ( strlen(INSSTU));
    	query = INSSTU;
    	
    	printf("%s\n" , query );
    	
    	if(collegamentoDB( mysql ) != 0){
    	  /*  printf("Errore di qualcosa!!%d" , err);*/
    	  return -1;
    	}
           
               
    // esegue la query
            if (mysql_query (mysql, query)) {
                    printf("Errore nella query.\n");
                    printf("%s" , mysql_error (mysql));
    	        mysql_close (mysql);
    		return -1;
            }
           
    
    
    
    
    
    	// chiude le risorse
            mysql_close (mysql);
    	return 0;
    }
    
    
    int main(){
    
      int  k;
      
      k = prova();
      printf("%d" , k);
      return 0;
    chiamo la funzione prova e poi in prova creo il puntatore MYSQL * mysql che utilizzera' collegamentoDB
    ho forse sbaglio ad utilizzare in quel modo il puntatore??

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.