• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

includowanie bibliotek w klasach powoduje crashe?

42 Warsaw Coding Academy
0 głosów
356 wizyt
pytanie zadane 22 listopada 2016 w C i C++ przez Michał Gawliczek Nowicjusz (190 p.)
Cześć, od pewnego czasu pracuje nad swoim silniczkiem 3d(glfw, glm, glew), wszystko szlo gladko kiedy to pare dni temu pojawily się dziwne problemy, na przykład uzycie couta powoduje, ze program crashuje sie przy starcie, uzycie za krotkiego stringa to samo, google mowi, ze to moze byc problem z uzyciem dynamicznych zmiennych, po paru testach dochodze do wniosku, ze to malo prawdopodobne, testowalem program na różne sposoby i jedyne czego nie jestem pewien to sposob w jaki includuje biblioteki.

Dla przykladu biblioteke glew includuje w mainie oraz w okolo 6 klasach ktorych uzywam w main, czy to moze byc powod moich problemow? uzywam codeblocksa, z tego co pamietam w visual studio takie cos bylo niedopuszczalne.

Jeśli jednak robie to prawidlowo, to czy ktoś ma pomysł w czym może być problem?

3 odpowiedzi

0 głosów
odpowiedź 22 listopada 2016 przez adrian17 Mentor (353,220 p.)
wybrane 24 listopada 2016 przez Michał Gawliczek
 
Najlepsza
Nie, #include powinno mieć żadnego związku z działaniem programu, to generalnie tylko zbiór deklaracji funkcji i typów.

Pewnie gdzieś Ci się pamięć sypie.

Na jakim systemie jesteś? Korzystasz z debuggera? Jeśli masz kod w jakimś githubie, pokażesz go?
0 głosów
odpowiedź 22 listopada 2016 przez Sinnley Stary wyjadacz (12,810 p.)

Daj kod synu, kod wink

0 głosów
odpowiedź 23 listopada 2016 przez Michał Gawliczek Nowicjusz (190 p.)
edycja 23 listopada 2016 przez Michał Gawliczek

to może wkleje sam kod gdzie używam dynamicznej pamieci

Tutaj mamy deklaracje wskaznikow w nagłówku klasy :

 

        int         **  Object_Array;
        Ms_Shader   *   Shader_Array;
        Ms_Drawer   *   Mesh_Array;
        Ms_Textures *   Texture_Array;
        glm::mat4   *   Matrix_Array;

 

pozniej konstruktor:

   
   Ms_Scene::Num_Objects = 8;

    Ms_Scene::Object_Array  = new int*[4];
    for (int i = 0; i < 4; ++i)
        Object_Array[i] = new int[Ms_Scene::Num_Objects];

    Ms_Scene::Shader_Array  = new Ms_Shader[4];
    Ms_Scene::Mesh_Array    = new Ms_Drawer[8];
    Ms_Scene::Textur_Array  = new Ms_Textures[5];
    Ms_Scene::Matrix_Array  = new glm::mat4[8];

nastepnie program tylko laduje dane do tych tablic

 

 Ms_Scene::Shader_Array[0].Load_Shader("test");
    Ms_Scene::Shader_Array[1].Load_Shader("light");
    Ms_Scene::Shader_Array[2].Load_Shader("ambient");
    Ms_Scene::Shader_Array[3].Load_Shader("water");

    Ms_Scene::Mesh_Array[0].LoadMesh("Data/World/Shape/Grid.obj");
    Ms_Scene::Mesh_Array[1].LoadMesh("Data/World/Shape/Ms_Box2.obj");
    Ms_Scene::Mesh_Array[2].LoadMesh("Data/World/Shape/Storm.obj");
    Ms_Scene::Mesh_Array[3].LoadAnim("Data/World/Shape/storm.dae");
    Ms_Scene::Mesh_Array[4].LoadAnim("Data/World/Shape/Skeletal_test3.dae");
    Ms_Scene::Mesh_Array[5].LoadAnim("Data/World/Shape/Skeletal_test.dae");
    Ms_Scene::Mesh_Array[6].LoadMesh("Data/World/Shape/boat.obj");
    Ms_Scene::Mesh_Array[7].LoadMesh("Data/World/Shape/bulb.obj");

    Ms_Scene::Textur_Array[0].LoadTxT("Data/World/View/Grid.png");
    Ms_Scene::Textur_Array[1].LoadTxT("Data/World/View/box.jpg");
    Ms_Scene::Textur_Array[2].LoadTxT("Data/World/View/Storm.dds");
    Ms_Scene::Textur_Array[3].LoadTxT("Data/World/View/box.jpg");
    Ms_Scene::Textur_Array[4].LoadTxT("Data/World/View/boat_d.png");


    Ms_Scene::Matrix_Array[0] = glm::translate(Ms_Scene::Matrix_Array[0], glm::vec3(0.0f, 0.0f, 0.0f));
    Ms_Scene::Matrix_Array[1] = glm::translate(Ms_Scene::Matrix_Array[1], glm::vec3(8.0f, 0.0f, -8.0f));
    Ms_Scene::Matrix_Array[2] = glm::translate(Ms_Scene::Matrix_Array[2], glm::vec3(6.0f, 0.0f, 1.0f));
    Ms_Scene::Matrix_Array[3] = glm::translate(Ms_Scene::Matrix_Array[3], glm::vec3(2.0f, 0.0f, 2.0f));
    Ms_Scene::Matrix_Array[4] = glm::translate(Ms_Scene::Matrix_Array[4], glm::vec3(-5.0f, 0.0f, -3.0f));
    Ms_Scene::Matrix_Array[5] = glm::translate(Ms_Scene::Matrix_Array[5], glm::vec3(-6.0f, 0.0f, 4.0f));
    Ms_Scene::Matrix_Array[6] = glm::translate(Ms_Scene::Matrix_Array[6], glm::vec3(-1.0f, 0.0f, -5.0f));
    Ms_Scene::Matrix_Array[7] = glm::translate(Ms_Scene::Matrix_Array[7], glm::vec3(0.0f, 5.0f, 0.0f));

    Ms_Scene::Object_Array[0][0] = 2; Ms_Scene::Object_Array[1][0] = 0; Ms_Scene::Object_Array[2][0] = 0; Ms_Scene::Object_Array[3][0] = 0;
    Ms_Scene::Object_Array[0][1] = 0; Ms_Scene::Object_Array[1][1] = 1; Ms_Scene::Object_Array[2][1] = 1; Ms_Scene::Object_Array[3][1] = 1;
    Ms_Scene::Object_Array[0][2] = 0; Ms_Scene::Object_Array[1][2] = 2; Ms_Scene::Object_Array[2][2] = 2; Ms_Scene::Object_Array[3][2] = 2;
    Ms_Scene::Object_Array[0][3] = 0; Ms_Scene::Object_Array[1][3] = 3; Ms_Scene::Object_Array[2][3] = 2; Ms_Scene::Object_Array[3][3] = 3;
    Ms_Scene::Object_Array[0][4] = 0; Ms_Scene::Object_Array[1][4] = 4; Ms_Scene::Object_Array[2][4] = 1; Ms_Scene::Object_Array[3][4] = 4;
    Ms_Scene::Object_Array[0][5] = 0; Ms_Scene::Object_Array[1][5] = 5; Ms_Scene::Object_Array[2][5] = 1; Ms_Scene::Object_Array[3][5] = 5;
    Ms_Scene::Object_Array[0][6] = 0; Ms_Scene::Object_Array[1][6] = 6; Ms_Scene::Object_Array[2][6] = 4; Ms_Scene::Object_Array[3][6] = 6;
    Ms_Scene::Object_Array[0][7] = 1; Ms_Scene::Object_Array[1][7] = 7; Ms_Scene::Object_Array[2][7] = 1; Ms_Scene::Object_Array[3][7] = 7;

 

no i destruktor 

 

    for(int i= 0; i < 4; ++i)
        delete[] Ms_Scene::Object_Array[i];
    delete [] Ms_Scene::Object_Array;

    delete [] Ms_Scene::Shader_Array;
    delete [] Ms_Scene::Mesh_Array;
    delete [] Ms_Scene::Textur_Array;
    delete [] Ms_Scene::Matrix_Array;

to wszystko co robie, wydaje mi sie, że jest ok, jednak po dodaniu tego kodu do programu wszystko sie sypie

dodam, że jeżeli nie stworze obiektu tej klasy to program dziala dobrze, po stworzeniu obiektu wysypuje sie przy starcie(jeśli nigdzie nie uzyje cout, lub jakis string bedzie krotszy od 12 znakow)

komentarz 24 listopada 2016 przez Michał Gawliczek Nowicjusz (190 p.)

 

Problem rozwiązany(tak mi się wydaje xD)

Kiedy pisałem nową klase stwierdziłem, że przeniose(skopiuje) kod rysujacy w inne miejsce, nie usuwałem starego, po prostu go nigdzie nie użyłem, ale wygląda na to że glew/glfw nie pozwala na takie praktyki, jeśli się myle to mnie poprawcie xd

tutaj skopiowany kod:

        GLint objectColorLoc = glGetUniformLocation(ReadyShader, "objectColor");
        GLint lightColorLoc  = glGetUniformLocation(ReadyShader, "lightColor");
        GLint lightPositionLoc  = glGetUniformLocation(ReadyShader, "lightPosition");
        GLint modelLoc = glGetUniformLocation(ReadyShader, "model");
        GLint modelview = glGetUniformLocation(ReadyShader, "view");
        GLint modelproj = glGetUniformLocation(ReadyShader, "projection");

        glUniform3f(objectColorLoc, 0.1f, 0.1f, 0.1f);
        glUniform3f(lightColorLoc,  0.8f, 0.8f, 1.0f);
        glUniform3f(lightPositionLoc, 0.0f, 5.0f, 0.0f);
        glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model));
        glUniformMatrix4fv(modelview, 1, GL_FALSE, glm::value_ptr(view));
        glUniformMatrix4fv(modelproj, 1, GL_FALSE, glm::value_ptr(projection));

        glBindTexture(GL_TEXTURE_2D, Texture);
        glBindVertexArray(VAO_S);

        glDrawElements(GL_TRIANGLES, numVerts, GL_UNSIGNED_INT, 0);

        glBindVertexArray(0);

dzięki za odpowiedzi

Podobne pytania

0 głosów
1 odpowiedź 446 wizyt
pytanie zadane 12 grudnia 2016 w C i C++ przez military Obywatel (1,120 p.)
0 głosów
1 odpowiedź 204 wizyt
pytanie zadane 7 września 2015 w C i C++ przez patryk16 Obywatel (1,080 p.)

93,379 zapytań

142,380 odpowiedzi

322,533 komentarzy

62,734 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...