Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

27.08.2010, 17:10

boost::python: nullzeiger-crash bei zugriff auf datenmember

Ich habe begonnen für ein projekt ein C++ Modul mit boost::python zu schreiben.
Wenn ich jedoch auf private datenmember zugreife, oder einen nicht-default konstruktor verwende, crasht python mit Fehlercode 0xc0000005 (Nullzeiger). Daher vermute ich, das der this-Zeiger null ist, kann das jedoch mangels möglichkeit, den msvc-debugger in python reinzuhängen, nicht überprüfen.
Minimalcode:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
//math.h (gekürzt)
namespace nativeutil
{
    class vector2
    {
    public:
        double x;
        double y;
        vector2() {}
        vector2(const vector2& rhs):x(rhs.x), y(rhs.y) {}
    }
}

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
//pymodule.cpp
#include <boost\python.hpp>
#include "_math.h"

BOOST_PYTHON_MODULE(nativeutil)
{
    using namespace boost::python;
    class_<nativeutil::vector2>("vector2", "a 2D vector class")
        .def(init<double,double>())
        .def_readwrite("x", &nativeutil::vector2::x)
        .def_readwrite("y", &nativeutil::vector2::y);
}

Folgende Scripte crashen:

Quellcode

1
2
3
from bin.nativeutil import vector2
v=vector2()
v.x #crash

Quellcode

1
2
from bin.nativeutil import vector2
v=vector2(1.0,1.0)  #crash

Weiß jemand, woran das liegt, oder wie ich z.B. einen C++ debugger in python einhänge?

ArthurII

Treue Seele

Beiträge: 132

Wohnort: Aachen

Beruf: Student

  • Private Nachricht senden

2

27.08.2010, 19:09

ganz blöde frage: haste den python code schon mal alleine getestet? funzt das Modul überhaupt? an sich schaut der Python-Code zwar anständig aus, aber man weiß ja nie ;-)

oder du versuchst es mal mit

Quellcode

1
import bin.nativeutil

und gibst dann einfach immer das quell-modul an



Bei dem C++-Teil kenne ich mich jetzt einfach nicht aus...
Ich bin nicht verrückt - nur verhaltensoriginell!
Project-Seite: Aura

3

28.08.2010, 13:18

na, die beiden genannten scripts hab ich einfach zum testen über den interaktiven modus eingegeben.
dein Vorschlag mit import bin.nativeutil hat zu keiner veränderung geführt.
Aber danke für die ideen.

4

31.08.2010, 16:44

Nagut muss sagen das ich jetz nur inner Doku geguckt hab. Aber sowie es aussieht hast du schlicht den c-tor den du haben willst nicht definiert ;)

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
//math.h (gekürzt)
namespace nativeutil
{
    struct vector2
    {
        double x;
        double y;
        vector2() : x(0.0), y(0.0) {}
        vector2(vector2 const& rhs) : x(rhs.x), y(rhs.y) {}
        vector2(double x, double y) : x(x), y(y) {}
    };
};


Wobei du evtl. getter/setter nutzen könntest ;)
;)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

ArthurII

Treue Seele

Beiträge: 132

Wohnort: Aachen

Beruf: Student

  • Private Nachricht senden

5

31.08.2010, 17:19

macht zumindest für mich sinn, mal schauen, was der PCShadow dazu sagt...
Ich bin nicht verrückt - nur verhaltensoriginell!
Project-Seite: Aura

6

31.08.2010, 20:15

Also ich sehe auch nicht, wo ich da was vergessen hätte
Ich bin auch mittlerweile zu swig gewechselt, weil ich da im wesentlichen die deklarationen pasten kann und das den interface-code generiert, es sich dennoch gut in den build integrieren lässt und es außerdem praktisch auf anhieb funktioniert.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

7

31.08.2010, 20:46

Also bei mir funktioniert es nach einbauen des Fehlenden c'tors wunderbar mit boost-python. kA warum er da bei dir rumbockt.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

8

31.08.2010, 21:22

Ich hab noch mal in meinen post geschaut, es scheint, ich hab den ctor beim kürzen offensichtlich mitgekürzt, in meinem source war/ist er definitiv
Aber wie gesagt, ist auch nicht mehr so wichtig.

Werbeanzeige