[MySQL-C-API] "Segmentation fault"

  1. moses_78

    moses_78 Thread StarterMacUser Mitglied

    Mitglied seit:
    08.04.2005
    Beiträge:
    1.264
    Zustimmungen:
    22
    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
     
    moses_78, 31.03.2006
  2. moses_78

    moses_78 Thread StarterMacUser Mitglied

    Mitglied seit:
    08.04.2005
    Beiträge:
    1.264
    Zustimmungen:
    22
    *push*

    Och kommt, keiner 'ne Idee :(

    Was heist denn eigentlich "segmentation fault"?
     
    moses_78, 01.04.2006
  3. oneOeight

    oneOeightMacUser Mitglied

    Mitglied seit:
    23.11.2004
    Beiträge:
    48.174
    Zustimmungen:
    3.890
    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
     
    oneOeight, 01.04.2006
  4. sevY

    sevY

    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…
     
    sevY, 01.04.2006
  5. moses_78

    moses_78 Thread StarterMacUser Mitglied

    Mitglied seit:
    08.04.2005
    Beiträge:
    1.264
    Zustimmungen:
    22
    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?
     
    moses_78, 01.04.2006
  6. Agmemon

    AgmemonMacUser Mitglied

    Mitglied seit:
    05.11.2003
    Beiträge:
    172
    Zustimmungen:
    0
    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.
     
    Agmemon, 11.04.2006
Die Seite wird geladen...
Ähnliche Themen - [MySQL API] Segmentation
  1. traue niemandem
    Antworten:
    2
    Aufrufe:
    1.191
  2. nickvan
    Antworten:
    1
    Aufrufe:
    871
    Michael_K
    12.11.2014
  3. LukeStylewalker
    Antworten:
    3
    Aufrufe:
    1.201
    volatus
    22.02.2014
  4. Jache
    Antworten:
    4
    Aufrufe:
    4.809
  5. LexxCrowbar
    Antworten:
    16
    Aufrufe:
    3.834