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

Usunięcie figury crashuje program

Object Storage Arubacloud
–1 głos
245 wizyt
pytanie zadane 25 marca 2016 w C i C++ przez Avernis Nałogowiec (27,400 p.)

Gdy przypisuję do vectora klasę z metodami do rysowania figur

std::vector<Figures> figureWall;
figureWall.push_back(Figures(1 argument, 2 argument));

i próbuję ją usunąć w pętli głównej:

if(glfwGetKey(moving.window, GLFW_KEY_R))
{
    figureWall.pop_back();
}

to mi crashuje program. 

1 odpowiedź

0 głosów
odpowiedź 25 marca 2016 przez jegor377 Stary wyjadacz (13,230 p.)
nie znam się na opengl. ale raczej jakaś funkcja próbuje odwołać się do tej figury po tym jak ją usuwasz. ;)
komentarz 25 marca 2016 przez Avernis Nałogowiec (27,400 p.)
Już rozwiązałem, użyłem destruktora tak jak jakieś 10 min temu napisałeś pod poprzednim pytaniem
komentarz 25 marca 2016 przez jegor377 Stary wyjadacz (13,230 p.)
aaaa, ok. spk
komentarz 25 marca 2016 przez jegor377 Stary wyjadacz (13,230 p.)
debuguj program
komentarz 25 marca 2016 przez Avernis Nałogowiec (27,400 p.)
Jest tylko 1 problem. Gdy używam destruktora to funkcje tego obiektu nadal działają...
komentarz 25 marca 2016 przez jegor377 Stary wyjadacz (13,230 p.)
pokaż mi więcej kodu
komentarz 25 marca 2016 przez Avernis Nałogowiec (27,400 p.)

Tutaj jest funkcja główna, kasowanie obiektu jest przy ostatnim ifie

#include <GL/glew.h>
#include <glfw3.h>
#include <glm.hpp>
#include <gtc/matrix_transform.hpp>
#include <gtc/type_ptr.hpp>

#include <FreeImage.h>
#include <SFML\Graphics.hpp>

#include <cmath>
#include <iostream>
#include <fstream>
#include <string>
#include <thread>

#include "Rendering.h"
#include "Figures.h"
#include "Moving.h"
#include "setAndSend.h"
#include "Timer.h"
#include "Skills.h"
#include "GUI.h"

void main()
{
	SetAndSend sas;
	Rendering render;
	Moving moving(800, 600, "", 4, false, "C:/Game/Save/camera/cameraPosition.txt");
	// Utworzenie obiektow VBO i VAO
	Figures figureFloor("C:/Game/Blocks/floor/floor.txt", "C:/Game/Blocks/floor/floorTexture.txt");
	std::vector<Figures> figureWall;
	figureWall.push_back(Figures("C:/Game/Blocks/brick/brick.txt", "C:/Game/Blocks/brick/brickTexture.txt"));
	Figures figureWall2("C:/Game/Blocks/brick/brick.txt", "C:/Game/Blocks/brick/brickTexture.txt");
	
	Timer time;
	Skills skills;
	GUI gui;

	//*********************************************************************

	GLuint shaders = render.loadShader("C:/Shaders/virtualCamera/vertexShader.glsl", "C:/Shaders/virtualCamera/fragmentShader.glsl");
	GLint texture_slot = glGetUniformLocation(shaders, "basic_texture");
	glUniform1i(texture_slot, 0);

	GLint viewUniform = glGetUniformLocation(shaders, "view_matrix");
	GLint perspectiveUniform = glGetUniformLocation(shaders, "perspective_matrix");
	GLint light = glGetUniformLocation(shaders, "ambientColor");
	GLint tranforms = glGetUniformLocation(shaders, "transform");
	
	glActiveTexture(GL_TEXTURE0);
	render.loadTexture("C:/Shaders/virtualCamera/Brick.jpg");
	glActiveTexture(GL_TEXTURE1);
	render.loadTexture("C:/Shaders/virtualCamera/Grass.jpg");

	sas.setCamera(moving, viewUniform, perspectiveUniform);
	
	figureWall[0].y -= 0.5;

	float x;
	float y;

	render.deep();
	while (!glfwWindowShouldClose(moving.window))
	{
		render.ClearColor(0.15, 0.15, 1.0, 0.0, moving.window_width, moving.window_height);
		glUseProgram(shaders);

		moving.moving();
		gui.oneKeyPressed(moving);

		figureWall[0].elipseMoving(x, y, 0.01, 1);

		skills.flash(light);

		time.dayAndNight(light);
		
		moving.previous_time = moving.actual_time;
		moving.actual_time = glfwGetTime();
		moving.saveCameraPosition("C:/Game/Save/camera/cameraPosition.txt");

		glUniformMatrix4fv(viewUniform, 1, GL_FALSE, glm::value_ptr(moving.view_matrix));
		glUniformMatrix4fv(perspectiveUniform, 1, GL_FALSE, glm::value_ptr(moving.perspective));
		
		//*****************************************************************

		figureFloor.setPosition(tranforms, glm::vec3(0.0, 0.0, 0.0));
		figureFloor.draw(texture_slot, 1);
		
		if (gui.flag)
		{
			figureWall[0].setPosition(tranforms, glm::vec3(x, y, 0.0));		
			figureWall[0].draw(texture_slot, 0);
		}
		figureWall2.setPosition(tranforms, glm::vec3(0, 0, 0));
		figureWall2.draw(texture_slot, 0);
		if (figureWall2.isColliding(moving))
		{
			std::cout << "x";
		}
		if (glfwGetKey(moving.window, GLFW_KEY_R))
		{
			figureWall[0].~Figures();
		}
		if (figureWall[0].isColliding(moving))
		{
			std::cout << "y";
		}

		render.ProcessWindowEvents(moving.window);	
	}

	render.Terminate(moving.window);
                  
	return;
}

 

komentarz 25 marca 2016 przez jegor377 Stary wyjadacz (13,230 p.)
nie można używać destruktora bez usuwania obiektu. I w ogóle po co Ci vector skoro nie masz tam więcej obiektów? powinieneś figureWall.erase(figureWall.begin())
komentarz 25 marca 2016 przez Avernis Nałogowiec (27,400 p.)
mam tam 1 obiekt, i ten vector to testowe
komentarz 25 marca 2016 przez jegor377 Stary wyjadacz (13,230 p.)
aha, No to usuwaj normalnie ten obiekt, bo masz go w pamięci cały czas.
komentarz 25 marca 2016 przez Avernis Nałogowiec (27,400 p.)
Jak to usuwaj normalnie?!
komentarz 25 marca 2016 przez jegor377 Stary wyjadacz (13,230 p.)

figureWall[0].~Figures(); - nie powoduje usunięcia figury.

komentarz 25 marca 2016 przez jegor377 Stary wyjadacz (13,230 p.)
wywołujesz jedynie dekonstruktor, który sprząta, a śmieci dalej są w pamięci

Podobne pytania

0 głosów
1 odpowiedź 365 wizyt
pytanie zadane 27 lutego 2016 w C i C++ przez Avernis Nałogowiec (27,400 p.)
0 głosów
1 odpowiedź 843 wizyt
pytanie zadane 19 lutego 2017 w C i C++ przez Jakub Chomicz Początkujący (380 p.)
0 głosów
1 odpowiedź 268 wizyt
pytanie zadane 26 stycznia 2017 w C i C++ przez Jakub Chomicz Początkujący (380 p.)

92,624 zapytań

141,478 odpowiedzi

319,822 komentarzy

62,005 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...