Speicherzugriffsfehler (Speicherabzug geschrieben)



  • #include <SFML/Graphics.hpp>
    #include<SFML/Window.hpp>
    #include<SFML/System.hpp>
    #include<SFML/Graphics/RenderWindow.hpp>
    #include<SFML/Graphics/Texture.hpp>
    #include<iostream>
    using namespace sf;
    using namespace std;
    
    
    
    
    int main()
    {
        Sprite bg;
        Texture Background;
        Background.loadFromFile("tux.png");
    
        bg.setTexture(Background);
        bg.scale(200,200);
        bg.setPosition(0,0);
        bg.setColor(Color::White);
    
        RenderWindow window(VideoMode(600,800,32),"DDDD",Style::Titlebar|Style::Close);
        window.setVerticalSyncEnabled(1);
    
        while (window.isOpen())
        {
    
            Event event;
            while (window.pollEvent(event))
            {
                if( (event.type == Event::Closed) || event.key.code == Keyboard::Escape)
                    {
                    window.close();
                    break;
                    }
            }
            window.draw(bg);
            window.clear();
            window.display();
        }
    
    
        return 0;
    }
    

    wenn das bild nicht vorhanden ist lÀuft es

    g++ -c -Wall main.cpp
    
     g++ main.o -o app -lsfml-system -lsfml-window -lsfml-graphics 
    ./app
    
    Speicherzugriffsfehler (Speicherabzug geschrieben)
    


  • Gut es will garnicht 😃 @Swordfish
    immerhin Passiert jetz nix

    #include <SFML/Graphics.hpp>
    #include<SFML/Window.hpp>
    #include<SFML/System.hpp>
    using namespace sf;
    using namespace std;
    Texture* Background;
    Sprite*bg;
    
    
    int main()
    {
    if (!Background|| !Background->loadFromFile("rec/BG1.png"))
    
                return EXIT_FAILURE;
        bg->setTexture(*Background);
        bg->scale(200,200);
        bg->setPosition(0,0);
        bg->setColor(Color::White);
    
        RenderWindow window(VideoMode(300,300,32),"SDFFSAF",Style::Titlebar|Style::Close);
    
    
            window.setVerticalSyncEnabled(1);
    
        while (window.isOpen())
        {
    
            Event event;
            while (window.pollEvent(event))
            {
                if( (event.type == Event::Closed) || event.key.code == Keyboard::Escape)
                    window.close();
            }
            window.draw(*bg);
            window.clear();
            window.display();
        }
    
    
        return 0;
    }
    

  • Banned

    @luzl sagte in Speicherzugriffsfehler (Speicherabzug geschrieben):

    immerhin Passiert jetz nix

    Mach mal in der ersten Zeile der Main:

    Background = new Texture();
    bg = new Sprite();
    


  • Danke l Das hat jezt echt geklappt 😃
    muss ich das fenster nurnoch offen halten
    und mir das mit den Pointern ansehen dann wird es wohl auch klappen
    Danke auf jedenfall 😃


  • Banned

    @luzl sagte in Speicherzugriffsfehler (Speicherabzug geschrieben):

    und mir das mit den Pointern ansehen dann wird es wohl auch klappen

    Pointer brauchst du doch eigentlich nicht. Sprite und Texture einfach als lokale Variablen in der Main anlegen. Dann entfÀllt auch das 'deleten'.



  • @RBS2 Eigentlich hatte halt das Problem mit dem speicher zugriff
    dann dacht ich Pointer.
    hat ja jezt geklappt nur die sprite wird nicht angezeigt.



  • @luzl sagte in Speicherzugriffsfehler (Speicherabzug geschrieben):

    hat ja jezt geklappt nur die sprite wird nicht angezeigt.

    Wird es, aber Du machst danach sf::RenderTarget::clear() ...

    #include <cstdlib>
    
    #include <sfml/graphics.hpp>
    #include <sfml/window.hpp>
    
    int main()
    {
    	sf::Texture image;
    	if (!image.loadFromFile("rec/BG1.png"))
    		return EXIT_FAILURE;
    
    	sf::Sprite sprite{ image };
    	sf::RenderWindow window{ sf::VideoMode{ 300, 300, 32 }, "SDFFSAF", sf::Style::Titlebar | sf::Style::Close };
    
    	while (window.isOpen()) {
    		sf::Event event;
    		while (window.pollEvent(event)) {
    			if (event.type == sf::Event::Closed || event.key.code == sf::Keyboard::Escape)
    				window.close();
    		}
    
    		window.draw(sprite);
    		window.display();
    	}
    }
    

    tut toll.



  • Ja hab das jetzt so gelöst lĂ€uft ganz gut wĂŒrde ich sagen

    #include <SFML/Graphics.hpp>
    #include<SFML/Window.hpp>
    #include<SFML/System.hpp>
    
    
    
    using namespace sf;
    using namespace std;
    
    
    
    int main()
    {   int changeX =0;
    int changY =0;
        int Tux_pos_x =100;
        int Tux_pos_y =100;
        Texture* Background ;
        Sprite*bg;
        Background = new Texture();
        bg = new Sprite();
    
    
        if(!Background->loadFromFile("tux.png",IntRect(0,1,0,1)))
    	return EXIT_FAILURE;
        bg->setTexture(*Background);
        bg->scale(1,1);
        bg->setPosition(Tux_pos_x,Tux_pos_y);
    
    
    
        RenderWindow window(VideoMode(800,600,32),"SDFFSAF",Style::Titlebar|Style::Close);
    
    
            window.setVerticalSyncEnabled(1);
    
        while (window.isOpen())
        {
    
            Event event;
            while (window.pollEvent(event))
            {
                if( (event.type == Event::Closed) || event.key.code == Keyboard::Escape)
                     window.close();
    
                     switch(event.key.code)
                        {
                            case Keyboard::D:
                                Tux_pos_x+20;
                                window.clear();
                                window.draw(*bg);
                                window.display();
                        }
            }
    
    	window.clear(Color::Black);
            window.draw(*bg);
    
            window.display();
        }
    
    
        return 1 ;
    }
    
    

    Naja mal sehen wie das noch wird unter Windows brauchte ich keine Pointer verwenden
    und mit Debuggern kann ich auch nicht umgehen.



  • Kannst Du bitte Pointer und new bleiben lassen? Bist Du Java-vorgeschĂ€digt!?

    @luzl sagte in Speicherzugriffsfehler (Speicherabzug geschrieben):

    und mit Debuggern kann ich auch nicht umgehen.

    lernen?

    @luzl sagte in Speicherzugriffsfehler (Speicherabzug geschrieben):

    unter Windows brauchte ich keine Pointer verwenden

    Du brauchst auch unter Linux keine Pointer.

    @luzl sagte in Speicherzugriffsfehler (Speicherabzug geschrieben):

    return 1 ;
    

    Kreativ. Ein Programm sollte 0 oder EXIT_SUCCESS oder fĂŒr C und C++ garnichts zurĂŒckgeben wenn kein Fehler aufgetreten ist.

    [basic.start.main/5]:

    [...] If control flows off the end of the compound-statement of main, the effect is equivalent to a return with operand 0 (see also [except.handle]).



  • This post is deleted!


  • @Swordfish sagte in Speicherzugriffsfehler (Speicherabzug geschrieben):

    ointer und new bleiben lassen? Bist Du Java-vorgeschÀdigt!

    Ohne lĂ€ufts halt nicht und wollte mir jetzt kein Windows auf den Rechner installieren bin schon am ĂŒberlegen das einfach nochmal in einer Vm laufen zu lassen mĂŒsst ich halt auch Download

    Naja hab C++ halt mit Internet tutorials gelernte. Java hatt ich auch mal hat mir absolut nicht gepasst auch wenn's leichter gemacht ist.Genauso wie C# soooooo viele libarys und ist eh fas das gleiche.



  • @luzl sagte in Speicherzugriffsfehler (Speicherabzug geschrieben):

    Ohne lÀufts halt nicht

    Dann machst du Blödsinn.

    @luzl sagte in Speicherzugriffsfehler (Speicherabzug geschrieben):

    Naja hab C++ halt mit Internet tutorials gelernte.

    Ja, schlechte Idee.



  • Ich Kann hier einen Der Einstig In C++ hab halt Pointer und Header echt Schweirigkeiten. und um die ĂŒbungen zu lösen mĂŒsst ich mir nochma das halbe Buch durchlesen auserdem benutzt es C++ 11 ISO also auch schon veraltet.



  • @luzl Du hast ein Buch ĂŒber C++ bei dem Spielereien mit sfml zu den Grundlagen gehören? Wegwerfen. Gaaaanz weit.



  • @Swordfish sagte in Speicherzugriffsfehler (Speicherabzug geschrieben):

    hast ein Buch ĂŒber C++ bei dem Spielereien mit sfml zu den Grundlagen gehören? Wegwerfen. GAAAAANZ weit.

    Nein Die Grundlagen von C++ snytax Pointer Funktion Header hab ich mir nicht gegeben und templats etc
    Es heißt C++ Der Einstig aktuell zu c++ 11
    hatte es mir halb 3/4 mĂ€ĂŸig durchgelesen mit dem kremmpel was ich hier gefunden hab unter Linux mit Python Ă€hnelt sich ja doch,sowie die ganzen c Dokumente und funktioniert irgendwie,doch solang es klappt und ich jetzt nicht in einer Programmierer Gruppe lande wo alles zu 100% beim ersten versuch sein muss Laufen muss. geht's. z.b. Mit dem Pointer war ja jezt hier hatte das halt alles unter Linux geschriebn auch wenn die in anderen foren auch meinen es ginge ohne bei mir eben nicht und jezt lĂ€uft es immerhin. auch wenn ich ungern Pointer benutze.



  • @luzl Mein lieber. Das Beispiel das ich weiter oben gegeben habe lĂ€uft garantiert auf allem, das einen halbwegs aktuellen C++-Compiler hat (gcc, clang) und worauf SFML portiert wurde. Wenn das bei Dir nicht tut, machst Du was falsch. So einfach ist das. Nix Pointer. Nix new.

    @luzl sagte in Speicherzugriffsfehler (Speicherabzug geschrieben):

    [...] unter Linux mit Python Àhnelt sich ja doch, sowie die ganzen c Dokumente und funktioniert irgendwie, doch solang es klappt und ich jetzt nicht in einer Programmierer Gruppe lande wo alles zu 100% beim ersten versuch sein muss Laufen muss. geht's. [...]

    Von einer Sprache auf eine andere zu schließen ist eine gaaaanz doofe Idee. Besonders Python und C++!? Du machst Dir selbst das Leben schwer. Besorg' Dir ein Lehrbuch und arbeite es durch.



  • g++ --version
    g++ (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609
    Copyright (C) 2015 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    
    gcc (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609
    Copyright (C) 2015 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    

    Verwnde schon nur c++ mit gcc geht es auch nicht In den Exampels von SFML exstiert auch das Pong spiel einfach als beispiel. dies lief auch nur bis zur gameloop(); D.h Anzeigen des Textes doch drĂŒckte ich start stĂŒrzte es ab ich weiß das ist auch keine optimale lösung nach einigen minuten/ sekunden stĂŒrzt das hier laufende spiel auch ab jedoch werde ich aus dem debugger ddd auch nicht schaluer hab halt noch null Plan wie ich damit umgehen soll



  • @luzl und der Code?



  • #include <SFML/Graphics.hpp>
    #include<SFML/Window.hpp>
    #include<SFML/System.hpp>
    
    
    
    using namespace sf;
    using namespace std;
    
    
    
    int main()
    {
    
        //float move_x =1.0;
        float move_y =1.0;
    
        int Tux_pos_x =100;
        int Tux_pos_y =100;
        Texture* Background ;
        Sprite*bg;
        Background = new Texture();
        bg = new Sprite();
    
    
        if(!Background->loadFromFile("tux.png",IntRect(0,1,0,1)))
    	return EXIT_FAILURE;
        bg->setTexture(*Background);
        bg->scale(1,1);
        bg->setPosition(Tux_pos_x,Tux_pos_y);
    
    
    
        RenderWindow window(VideoMode(800,600,32),"SDFFSAF",Style::Titlebar|Style::Close);
    
    
            window.setVerticalSyncEnabled(1);
    
            Clock AITimer;
            //const Time AlTimer =seconds(0.01);
    
            Clock clock;
        while (window.isOpen())
        {
    
            Event event;
            while (window.pollEvent(event))
            {
                float deltaTime = clock.restart().asSeconds();
    
    
                if (event.type == Event::Closed)
                     {
                        window.close();
                        break;
    
                     }
                     if (event.type==Event::KeyPressed)
                            {
                                switch(event.key.code)
                                {
                                    case Keyboard::Escape:
                                    {
                                    window.close();
                                    break;
                                    }
                                    case Keyboard::W:
                                    {
                                    bg->move(bg->getPosition().x,bg->getPosition().y+move_y*deltaTime);
                                    break;
                                    }
                                    case Keyboard::S:
                                    {
                                    bg->move(bg->getPosition().x,bg->getPosition().y-move_y*deltaTime);
                                    break;
                                    }
                                    case Keyboard::A:
                                    {
                                    bg->move(bg->getPosition().x-move_y*deltaTime,bg->getPosition().y);
                                    break;
                                    }
                                    case Keyboard::D:
                                    {
                                    bg->move(bg->getPosition().x+move_y*deltaTime,bg->getPosition().y);
                                    break;
                                    }
                                    default :break;
                                }
                            }
            }
    
            window.clear(Color::Black);
            window.draw(*bg);
            window.display();
        }
    
    
        return 1 ;
    }
     
    

    Hab ich jezt kurz so weiter geschrieben nur Bewegt sich das bild diagonal o.O



  • Lass bitte Pointer und new endlich stecken.

    #include <sfml/graphics.hpp>
    #include <sfml/window.hpp>
    #include <sfml/system.hpp>
    
    int main()
    {
    	auto move_x{ 1.f };
    	auto move_y{ 1.f };
    
    	auto Tux_pos_x{ 100.f };
    	auto Tux_pos_y{ 100.f };
    
    	sf::Texture Background;
    	if (!Background.loadFromFile("tux.png"))
    		return EXIT_FAILURE;
    	
    	sf::Sprite bg{ Background };
    	bg.setPosition(Tux_pos_x, Tux_pos_y);
    
    	sf::RenderWindow window{ sf::VideoMode{ 800, 600, 32 }, "SDFFSAF", sf::Style::Titlebar | sf::Style::Close };
    	window.setVerticalSyncEnabled(true);
    
    	while (window.isOpen()) {
    		sf::Event event;
    		while (window.pollEvent(event)) {
    			if (event.type == sf::Event::Closed) {
    				window.close();
    				break;
    			}
    
    			if (event.type == sf::Event::KeyPressed) {
    				switch (event.key.code) {
    				case sf::Keyboard::Escape:
    					window.close();
    					break;
    
    				case sf::Keyboard::W:
    					Tux_pos_y -= move_y;
    					break;
    
    				case sf::Keyboard::S:
    					Tux_pos_y += move_y;
    					break;
    
    				case sf::Keyboard::A:
    					Tux_pos_x -= move_x;
    					break;
    
    				case sf::Keyboard::D:
    					Tux_pos_x += move_x;
    					break;
    				}
    			}
    		}
    
    		bg.setPosition(Tux_pos_x, Tux_pos_y);
    
    		window.clear(sf::Color::Black);
    		window.draw(bg);
    		window.display();
    	}
    }
    

    Was du aber mit Clock wolltest ist mir nicht so ganz klar.


Log in to reply