• 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?

VPS Starter Arubacloud
0 głosów
204 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 Ekspert (344,100 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ź 323 wizyt
pytanie zadane 12 grudnia 2016 w C i C++ przez military Obywatel (1,120 p.)
0 głosów
1 odpowiedź 164 wizyt
pytanie zadane 7 września 2015 w C i C++ przez patryk16 Obywatel (1,080 p.)
0 głosów
2 odpowiedzi 413 wizyt

92,452 zapytań

141,262 odpowiedzi

319,077 komentarzy

61,854 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...