CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Segmentation fault sur 2 lignes

lemoino
lemoino
Niveau 10
09 mars 2014 à 18:47:36

Bonjour !

Je suis un petit tuto sur l'api mysql en C et j'ai un ti problème, segmentation fault juste au début du code qui est repris du tuto alors je trouve ça bizarre :(

int main(void)
{
MYSQL mysql;
mysql_init(&mysql); //segmentation fault

}

Quelqu'un sait pourquoi ?
Merci !

kernel[]
kernel[]
Niveau 10
09 mars 2014 à 18:58:35

yop,

essaye ça :

MYSQL* mysql = mysql_init(NULL);

lemoino
lemoino
Niveau 10
09 mars 2014 à 19:21:57

Oui ça ça marche j'avais déjà essayé mais bon j'aimerai beaucoup résoudre ce mystère, comment chez le type qui fait le tuto ça peut marcher alors que moi je me tape une segmentation fault ça me presse les raisins mais à un point :hap:

Merci de ta réponse sinon :B

Code_paintball
Code_paintball
Niveau 1
09 mars 2014 à 19:36:18

Sûrement que le tuto était ancien et dans une vieille version de l'API la fonction ne marchait pas de la même manière

lemoino
lemoino
Niveau 10
09 mars 2014 à 19:44:05

Hmmm, suggestion intéressante en effet. Probablement ça, merci ! je vais pouvoir trouver le repos :hap:

Pseudo supprimé
Pseudo supprimé 09 mars 2014 à 19:59:23

Un petit prototype de la fonction pour nous aider ?

Schiffer
Schiffer
Niveau 10
09 mars 2014 à 20:09:56

Vampire
MYSQL *mysql_init(MYSQL *mysql)

http://dev.mysql.com/doc//refman/5.0/fr/mysql-init.html

Pseudo supprimé
Pseudo supprimé 09 mars 2014 à 20:16:26

Merci Schiffer :p) MYSQL est donc une structure.

mysql_init(&mysql);

Ca me semble correcte au niveau syntaxe, mais il faudrait vérifier la structure MYSQL, le problème vient peut-être de là.

Je vais essayer de jeter un coup d'oeil.

kernel[]
kernel[]
Niveau 10
09 mars 2014 à 20:22:58

t'es sûr que la segfault venait de là ? :(

c'ton code entier ?

Pseudo supprimé
Pseudo supprimé 09 mars 2014 à 20:23:05

Harpiste :

On nous a fait un genre de coup semblable avec la bibli SDL 2.

On a toujours a disposition certaines fonctions et structures mais on ne doit plus les utilisers car elles le sont implicitement par d'autres.

Je ne connais pas MYSQL mais ça vient peut être d'un problème semblable.

lemoino
lemoino
Niveau 10
09 mars 2014 à 20:36:21

Après un bon repas il m'a aussi semblé que quelque chose n'allait pas quant à la réponse sur l'ancienneté de l'api. Le tuto aurait été mis à jour (site du zéro) de plus mon ide m'indique avec l'infobulle quand j'écris la fonction ce qu'il attend, quand je commence à écrire
mysql_init() il me marque le prototype (MYSQL *mysql) en infobulle.

Que je marque quelque chose après les 2 premières lignes ou non ne change rien il ne le prend pas en compte sauf erreur de syntaxe. J'ai toujours segmentation fault
voici un screen

http://img.imagesia.com/fichiers/h0/capture-du-2014-03-09-20-31-24_imagesia-com_h0yc.png

kernel[]
kernel[]
Niveau 10
09 mars 2014 à 20:39:28

que dit le debugger ?

Pseudo supprimé
Pseudo supprimé 09 mars 2014 à 20:40:29

Bah, et si tu essaye de faire ça :

MYSQL mysql = mysql_init(NULL); ?

Pseudo supprimé
Pseudo supprimé 09 mars 2014 à 20:41:43

Ou bien :

MYSQL mysql;

mysql = mysql_init(mysql);

lemoino
lemoino
Niveau 10
09 mars 2014 à 21:01:47

Pour le debugger pour lui le code s'est exécuté normalement, il retourne 0, pas d'erreur.

@Vampire, oui je peux modifier le code pour qu'il fonctionne mais je voudrais savoir pourquoi le code de base ne marche pas ^^

Sinon pour tes solutions j'ai

-pour la première
error: invalid initializer

-pour la deuxième
error: redeclaration of ‘mysql’ with no linkage

Normalement je dois faire soit
MYSQL *mysql;
mysql = mysql_init(NULL);

soit ma première solution qui ne marche pas.
Mais du coup ce n'est pas parce j'initialise mysql sur "rien" qu'il y a segmentation fault ?
Sur mysql = mysql_init(NULL); c'est initialisé sur NULL donc ca va mais sur le premier exemple enfin je sais pas je débute j'ai pas encore bien assimilé les ref et pointeur
Mais je me dis que c'est censé marcher puisque c'est le prototype qui propose ça

Je vais devenir fou :0

Pseudo supprimé
Pseudo supprimé 09 mars 2014 à 21:10:00

Ah j'oubliais le symbole & dans la parenthèse !

Ah d'ac sinon, je pensais que tu cherchais une parade en fait.

Pseudo supprimé
Pseudo supprimé 09 mars 2014 à 21:17:48

Non mais de manière théorique tu as bon.

Si on prends en compte ça :

MYSQL *mysql_init(MYSQL *mysql)

La fonction attends une adresse d'une variable de type MYSQL.
Elle retourne un pointeur MYSQL.

lemoino
lemoino
Niveau 10
09 mars 2014 à 21:35:17

Merci pour vos réponses en tout cas, je vous tiens au jus si jamais j'ai une solution

Pseudo supprimé
Pseudo supprimé 09 mars 2014 à 21:44:33

http://stackoverflow.com/questions/17507415/segmentation-fault-when-connecting-to-mysql-database-with-c

Essaye de regarder ça, on ne sait jamais.

lemoino
lemoino
Niveau 10
09 mars 2014 à 22:04:51

Merci de ton dévouement Vampi' mais ici il fait une erreur de déclaration où la solution est "conn = mysql_init(NULL);" qui m'a déjà été donnée et que je connaissais mais mon problème est plus comment un code qui fonctionnait avant ne fonctionne plus maintenant alors que tout indique qu'il fonctionne :hap:

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment