[MySQL-C-API] "Segmentation fault"

Dieses Thema im Forum "Mac OS X Entwickler, Programmierer" wurde erstellt von moses_78, 31.03.2006.

  1. moses_78

    moses_78 Thread Starter MacUser Mitglied

    Beiträge:
    1.322
    Zustimmungen:
    22
    MacUser seit:
    08.04.2005
    Tach zusammen :),

    ich beschäftige mich zur Zeit mit dem MySQL-C-API (leider erfolglos). Immer,
    wenn ich mein kompiliertes Programm starte, bekomme ich den Fehler "Seg-
    mentation fault".

    Hier der Code:
    Code:
    #include <stdio.h>
    #include "/usr/local/mysql/include/mysql/mysql.h"
    
    
    #define def_host_name NULL
    #define def_user_name 'root'
    #define def_password  '<passwort>'
    #define def_db_name   NULL 
    
    
    MYSQL	*conn;
    
    int main(int argc, char *argv[])
     {	
     	conn = mysql_init(NULL);
     	
     	if(conn == NULL)
     	 {
     	 	fprintf(stderr, "mysql_init() fehlgeschlagen\n");
     	 	exit(0);
     	 }
     	 
     	if(mysql_real_connect(
     		conn,
     		def_host_name,
     		def_user_name,
     		def_password,
     		def_db_name,
     		0,
     		NULL,
     		0) == NULL)
     	 {
     	 	fprintf(stderr, "mysql_real_connect() fehlgeschlagen\n");
     	 	exit(0);
     	 }
     	 
     	mysql_close(conn); 
     
    	return 1;
     }
    Ich habe die ganze Geschichte mit gcc 4.0.0 kompiliert, mit folgenden Flags:
    gcc client1.c -L/usr/local/mysql/lib/mysql -lmysqlclient -o client1

    Dabei kommen folgende Warnings heraus:
    Code:
    client1.c: In function 'main':
    client1.c:20: warning: incompatible implicit declaration of built-in function 'exit'
    client1.c:25:4: warning: character constant too long for its type
    client1.c:27:4: warning: character constant too long for its type
    client1.c:31: warning: passing argument 2 of 'mysql_real_connect' makes pointer from integer without a cast
    client1.c:31: warning: passing argument 3 of 'mysql_real_connect' makes pointer from integer without a cast
    client1.c:31: warning: passing argument 4 of 'mysql_real_connect' makes pointer from integer without a cast
    client1.c:34: warning: incompatible implicit declaration of built-in function 'exit'
    Wie schon erwähnt, ich kann damit wenig anfangen. Ich wäre dankbar für Vor-
    schläge aller Art :)

    Gruß Mathias
     
  2. moses_78

    moses_78 Thread Starter MacUser Mitglied

    Beiträge:
    1.322
    Zustimmungen:
    22
    MacUser seit:
    08.04.2005
    *push*

    Och kommt, keiner 'ne Idee :(

    Was heist denn eigentlich "segmentation fault"?
     
  3. oneOeight

    oneOeight MacUser Mitglied

    Beiträge:
    46.831
    Zustimmungen:
    3.633
    MacUser seit:
    23.11.2004
    segmentation fault heisst, dass das programm auf einen speicher begreif zugreifen will, auf die es nicht zugreifen darf...

    warum liest du nicht die docu vernünftig?
    http://dev.mysql.com/doc/refman/4.1/en/c-api-function-overview.html

    da steht
     
  4. sevY

    sevY Gast

    Detailiertere Informationen kannst Du doch schon gar nicht mehr bekommen…

    Dein Programm versucht auf einen Speicherbereich zuzugreifen, der vorher nicht dafür alloziert wurde. Genau das ruft einen „Segmentation Fault“ hervor.
    Du solltest Dich mal ganz genau mit Datentypen und „Type Casting“ in C befassen…
     
  5. moses_78

    moses_78 Thread Starter MacUser Mitglied

    Beiträge:
    1.322
    Zustimmungen:
    22
    MacUser seit:
    08.04.2005
    Danke, dass ist doch schon was :)

    Erstens basiert mein Codeschnipsel oben nicht auf der offiziellen MySQL-Doku
    (ich wusste nichtmal, dass es zu dem MySQL-C-API ein Kapitel auf dev.mysql.
    com gibt) und zweitens kannst du mir glauben, dass ich zu den Leuten gehöre,
    die wirklich lieber nochmal die Dokus wälzen, anstatt die Frage in einem Fo-
    rum zu posten (nur in diesem Fall hab ichs versäumt....) ;)

    Mache ich...

    Einen schönen Abend euch noch... :)

    Edit: Noch eine generelle Frage: Werden die Bibliotheken, die ich mit dem
    Flag "-lmsqlclient" einbinde, fest einkopiert, d.h. ich könnte sie theoretisch
    löschen, oder werden sie bei jeder Ausführung des Programmes geladen, wie
    eine DLL unter Windows?
     
    Zuletzt bearbeitet: 01.04.2006
  6. Agmemon

    Agmemon MacUser Mitglied

    Beiträge:
    172
    Zustimmungen:
    0
    MacUser seit:
    05.11.2003
    Erstmal ein kleiner Hinweis auf Deine Ursprungsfrage: Leider werden warnings oftmals ignoriert, da es ja nur Warnings sind. Aber wie man in Deinem Fall sehen kann, hängen Segmentation faults und warnings über Typen meist zusammen.

    Zu deiner zweiten Frage: Ich weiß jetzt die Befehle nicht aus dem Kopf, aber Du hast eigentlich immer die Möglichkeit, die Bibliotheken dynamisch oder statisch zu linken. Es gibt sogar Anwendungsbereiche, z.B. bei medizinischen Anwendungen, da muss man statisch Linken, da man ansonsten keien Zulassung der Software bekommt.
     

Diese Seite empfehlen