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 :

c++ crash lorsque j'appelle une fonction membre sur une simple variable.


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut c++ crash lorsque j'appelle une fonction membre sur une simple variable.
    Salut, j'ai une classe ici :
    Code cpp : 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
                Instance::Instance (Material& material, sf::PrimitiveType pType) : material(material) {
                    primType = pType;
                    numInstances = 0;
                    vertices = VertexArray(pType);
                }
                void Instance::addVertexArray(VertexArray va, TransformMatrix tm) {
     
                    m_transforms.push_back(tm);
                    m_vertexArrays.push_back(va);
                    for (unsigned int i = 0; i < va.getVertexCount(); i++) {
                        Vertex v (tm.transform(math::Vec3f(va[i].position.x, va[i].position.y, va[i].position.z)), va[i].color, va[i].texCoords);
                        vertices.append(v);
                    }
                }
                void Instance::sortVertexArrays(View& view) {
                    vertices.clear();
                    std::multimap<float, VertexArray> sortedVA;
                    std::multimap<float, TransformMatrix> sortedTM;
                    for (unsigned int i = 0; i < m_vertexArrays.size(); i++) {
                        odfaeg::math::Vec3f center;
                        if (m_vertexArrays[i].getEntity() != nullptr) {
                            center = view.getViewMatrix().transform(m_vertexArrays[i].getEntity()->getCenter());
                        }
                        sortedVA.insert(std::make_pair(center.z, m_vertexArrays[i]));
                        sortedTM.insert(std::make_pair(center.z, m_transforms[i]));
                    }
                    m_vertexArrays.clear();
                    m_transforms.clear();
                    std::multimap<float, VertexArray>::iterator it;
                    std::multimap<float, TransformMatrix>::iterator it2;
                    for (it = sortedVA.begin(); it != sortedVA.end(); it++, it2++) {
                        VertexArray va = it->second;
                        TransformMatrix tm = it2->second;
                        m_vertexArrays.push_back(va);
                        m_transforms.push_back(tm);
                        for (unsigned int i = 0; i < it->second.getVertexCount(); i++) {
                            Vertex v (tm.transform(math::Vec3f(va[i].position.x, va[i].position.y, va[i].position.z)), va[i].color, va[i].texCoords);
                            vertices.append(v);
                        }
                    }
                }
                VertexArray& Instance::getAllVertices() {
                    return vertices;
                }
                std::vector<VertexArray> Instance::getVertexArrays() {
                    return m_vertexArrays;
                }
                void Instance::clear() {
                    m_transforms.clear();
                    m_vertexArrays.clear();
                }
    Ou je ne fais que d'ajouter et trier des tableaux de sommets. Mais lorsque j'appelle la méthode sortVertexArrays j'ai un crash :
    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int main(int argc, char* argv[])
    {   
        RenderWindow window(sf::VideoMode(800, 600, 32), "Test odfaeg",sf::Style::Default, sf::ContextSettings(0, 0, 4, 3, 0));
        Tile tile(nullptr, Vec3f(0, 0, 0), Vec3f(100, 100, 0), sf::IntRect(0, 0, 0, 0));
        Instance instance(tile.getFaces()[0]->getMaterial(), sf::Quads);
        instance.addVertexArray(tile.getFaces()[0]->getVertexArray(), tile.getTransform());
        instance.sortVertexArrays(window.getView());
        return 0;    
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #0 0x80aee2e	odfaeg::graphic::Instance::sortVertexArrays(this=0xbfffed40, view=...) (/home/laurent/Développement/Projets-c++/ODFAEG/src/odfaeg/Graphics/batcher.cpp:194)
    #1 0x808d1aa	main(argc=1, argv=0xbffff614) (/home/laurent/Développement/Projets-c++/ODFAEG-DEMO/main.cpp:100)
    On dirait que la matrice de transformation existe mais il n'arrive pas à appeler la méthode dessus, je ne comprend pas pourquoi.

  2. #2
    Invité
    Invité(e)
    Par défaut
    ha j'ai oublié d'initialiser it2 ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Free Pascal] Enregistrer une fonction callback depuis une fonction membre
    Par EpiTouille dans le forum Free Pascal
    Réponses: 3
    Dernier message: 11/03/2015, 11h11
  2. Réponses: 3
    Dernier message: 19/12/2014, 17h03
  3. Thread d'une fonction membre dans une fonction membre
    Par virtual_bug dans le forum Threads & Processus
    Réponses: 2
    Dernier message: 19/03/2014, 21h49
  4. appel a une fonction membre sur un non-object
    Par totensai dans le forum Langage
    Réponses: 2
    Dernier message: 14/01/2012, 22h43
  5. Réponses: 5
    Dernier message: 29/06/2006, 17h23

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