2015-08-23 1 views
0

J'essaie d'utiliser la bibliothèque libdxf. J'ai créé un petit programme en cours d'exécution que je reçois un défaut de segmentation. J'ai débogué mon code en utilisant gdb et ai localisé la ligne de code provoquant le noyau à être jeté.Erreur de segmentation à l'aide de libdxf

Mon extrait de code est écrit comme ci-dessous:

#include<iostream> 
#include<../src/dl_dxf.h> 
#include<../src/dl_creationadapter.h> 
using namespace std; 

class Test:public DL_CreationAdapter { 
public: 
    void write(); 
}; 

void Test::write(){ 
    DL_Dxf *dxf = new DL_Dxf(); // fault here 
    DL_Codes::version exportVersion = DL_Codes::AC1015; 
    DL_WriterA* dw = dxf->out("myfile.dxf", exportVersion); 
    if (dw==NULL) { 
     printf("Cannot open file 'myfile.dxf' \ 
       for writing."); 
    } 
    delete dxf; 
} 

int main(){ 
    Test test; 
    test.write(); // fault here 
    return 0; 
} 

La source de défaut de segmentation est en 2 lignes ci-dessus avec le commentaire //fault here.

Comment gérer cette erreur de segmentation?

+0

Vous gérez cela en corrigeant le bug. Désolé, mais votre question est complètement inutile, car le code à l'origine de l'erreur n'est pas inclus. Votre code d'appel n'est pas pertinent (et il n'est même pas minimal, comme requis par les directives). Cela dit, quelle version de cette bibliothèque utilisez-vous et quelle est son URL? Vous devriez mentionner ceux-ci parce que ce n'est pas une bibliothèque comme Boost ou Qt qui sont connus de la plupart des programmeurs C++. –

Répondre

2

Je souhaite que vous travaillez sur Linux.

Je compilé votre code un RAN avec succès tout en remplaçant

#include<../src/dl_dxf.h> 
#include<../src/dl_creationadapter.h> 

avec

#include<dxflib/dl_dxf.h> 
#include<dxflib/dl_creationadapter.h> 

J'ai installé package libdxflib-dev via le gestionnaire de package sur Ubuntu (Et aussi libdxflib-2.5.0.0 qui inclut le libdxflib.so).

Il a créé un fichier vide 'myfile.dxf' et est sorti.

Puisque vous incluez les en-têtes dxf d'un autre répertoire que je pense qu'il ya un problème de compatibilité (éventuellement entre les en-têtes de dxf et le fichier objet partagé)

Si vous êtes un utilisateur Ubuntu ci-dessous des lignes pour compiler le programme via l'aide standart les paquets peuvent être utiles pour comprendre la cause racine

sudo apt-get install libdxflib-dev libdxflib-2.5.0.0 

remplacer les inclusions avec

#include<dxflib/dl_dxf.h> 
#include<dxflib/dl_creationadapter.h> 

t poule compilez avec commande

g++ -Wall dxf.cpp -ldxflib -L/usr/lib/x86_64-linux-gnu/ 

et exécuter a.out

Notez que/usr/lib/x86_64-linux-gnu/est où se libdxflib.so. Cela peut être différent dans votre environnement.