IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

gérer exception sur linux


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    915
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 915
    Points : 85
    Points
    85
    Par défaut gérer exception sur linux
    Bonjour,
    Le programme ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    #include <stdio.h>
    #include <stdlib.h>
     
     
     
     
    int main(int argc, char* argv[])
    {
     
     
    	printf("Hello !!\n");
    	try
    	{
    	printf("1\n");
    	int *num;
    	num=NULL;
    	*num=8556;
    	}
    	catch(int o)
    	{
    	printf("Exception\n");
    	}
    	printf("fin ! \n");
    }

    compilé en linux avec comme commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g++ -o main main.c -lpthread
    Le programme s’exécute , mais l'exception ne fonctionne pas.

    Qu'est ce que je dois faire ?
    Merci

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 578
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 578
    Points : 7 697
    Points
    7 697
    Par défaut
    Bonjour,

    try catch n'existent pas en langage C! Tu utilises g++ donc tu compiles en C++.
    Et en C++, on ne peut pas "catcher" les hardware exceptions telle que segmentation fault. Seules les exceptions logicielle peuvent être gérées.
    Exemple (C++)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    int main() {
       std::array  tableau{0,1};
       try {
          int x = tableau.at(10);
       }
       catch( std::exception& e ) {
          std::cout << e.what();  // va afficher "indice tableau hors limites";
       }
       try {
          int x = tableau[10];      // undefined behavior
          int y = 5 / tableau[0];   // division par zéro
          int z = *(int*)NULL;      // déréférencement d'un pointeur null
       }
       catch(...) {
          // jamais atteint, aucune des 3 erreurs n'est une exception C++
          // le programme va vraisemblablement planter!
       }
    }

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    915
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 915
    Points : 85
    Points
    85
    Par défaut
    Pourtant sur msvc windows , try catch peux catcher les adresse mémoire incorrectes.

    Citation Envoyé par dalfab Voir le message
    Bonjour,

    try catch n'existent pas en langage C! Tu utilises g++ donc tu compiles en C++.
    Et en C++, on ne peut pas "catcher" les hardware exceptions telle que segmentation fault. Seules les exceptions logicielle peuvent être gérées.
    Exemple (C++)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    int main() {
       std::array  tableau{0,1};
       try {
          int x = tableau.at(10);
       }
       catch( std::exception& e ) {
          std::cout << e.what();  // va afficher "indice tableau hors limites";
       }
       try {
          int x = tableau[10];      // undefined behavior
          int y = 5 / tableau[0];   // division par zéro
          int z = *(int*)NULL;      // déréférencement d'un pointeur null
       }
       catch(...) {
          // jamais atteint, aucune des 3 erreurs n'est une exception C++
          // le programme va vraisemblablement planter!
       }
    }

  4. #4
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 578
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 578
    Points : 7 697
    Points
    7 697
    Par défaut
    En effet, MSVC gère des exceptions hard, il me semble qu'il utilise __try, __catch et __finalize et ça s'utilise en C ou en C++. Je ne sais pas si gcc a quelque chose de similaire.

Discussions similaires

  1. Réponses: 9
    Dernier message: 30/03/2017, 21h08
  2. quel sgbd sur linux??
    Par fabfab1 dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 27/11/2004, 18h38
  3. lancer OEM via le browser (10g sur linux)
    Par learn dans le forum Entreprise Manager
    Réponses: 6
    Dernier message: 20/09/2004, 17h04
  4. [Tomcat] Exception sur JSP
    Par Malaussene dans le forum Tomcat et TomEE
    Réponses: 7
    Dernier message: 10/09/2004, 08h43
  5. [analyse de syntaxe] pour C et C++ sur Linux
    Par Madmac dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 10/07/2004, 06h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo