Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 19:18

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



C++ Zugriffsrecht Verletzung

Discussion on C++ Zugriffsrecht Verletzung within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jun 2011
Posts: 265
Received Thanks: 50
C++ Zugriffsrecht Verletzung

Hey Leute,

Ich habe ein Problem mit "Zugriffsrechten".
Quote:
Unbehandelte Ausnahme bei 0x76f715de in Universe_Area official.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000010.
Laut Compiler ist die Funktion "Stone.draw_Enemy();" schuld.

Das ist der Code:
main
Code:
#include <Windows.h>
#include "Randomizer.h"
#include "Window.h"
#include "Player.h"
#include "Sound.h"

int main()
{
	/*
        CODE
        */
	
	Enemy Stone;
	sf::Texture TStone = Stone.define_Enemy( "***/****/****.png" );
	sf::Sprite *SStone;

	sf::RenderWindow App( sf::VideoMode( 806, 600, 32 ), "Universe Area       Alpha 1.2.2.0", sf::Style::Titlebar );
	App.setFramerateLimit( 60 );
	WindowEvent wEvent;

	/*
        CODE
        */

	while( App.isOpen() )
	{
		/*
                CODE
                */

		SStone = Stone.spawn_Enemy( TStone, 30, 30 );


		App.clear( sf::Color( 0, 0, 0 ) );
		/*
                CODE
                */
		Stone.draw_Enemy( App, SStone );
		App.display();
	}

	return 0;
}
Player.h
Code:
#include <SFML/Graphics.hpp>
#include <string>
#include <list>
#include "Randomizer.h"

/*
CODE
*/

/*****-GEGNERKLASSE-*****/
class Enemy
{
	private:
		sf::Texture TEnemy;
		float CenterX;
		float CenterY;

		sf::Clock SpawnTimer;
		std::list<sf::Sprite>EnemyListe;
		std::list<sf::Sprite>::iterator EnemyIt;

	public:
		sf::Texture define_Enemy( const std::string TexturePfad );
		sf::Sprite* spawn_Enemy( sf::Texture &sTEnemy, const int TextureX, const int TextureY );
		void draw_Enemy( sf::RenderWindow &Window, sf::Sprite *dSEnemy );
};
/*****-GEGNERKLASSE-*****/
Player.cpp
Code:
#include "Player.h"

//-------------------------------------------------------------------------------------------------// **BEGIN**
//-------------------------------------------------------------------------------------------------// **BEGIN**
//-------------------------------------------------------------------------------------------------// **BEGIN**

sf::Texture Enemy::define_Enemy( const std::string TexturePfad )
{
	TEnemy.loadFromFile( TexturePfad );

	return TEnemy;
}

sf::Sprite* Enemy::spawn_Enemy( sf::Texture &sTEnemy, const int TextureX, const int TextureY )
{
	CenterX = ( TextureX / 2);
	CenterY = ( TextureY / 2);

	if( true )
	{
		if( SpawnTimer.getElapsedTime() > sf::seconds( 0.2 ) )
		{
			sf::Sprite *ESprite;
			ESprite = new sf::Sprite;
			ESprite->setTexture( sTEnemy );
			ESprite->setPosition( int_Randomizer( 20, 770 ), -50 );
			ESprite->setOrigin( CenterX, CenterY );

			EnemyListe.push_back( *ESprite );

			SpawnTimer.restart();

			return ESprite;
		}
	}
}

void Enemy::draw_Enemy( sf::RenderWindow &Window, sf::Sprite *dSEnemy )
{
	for(EnemyIt = EnemyListe.begin(); EnemyIt != EnemyListe.end(); EnemyIt++)
	{
		dSEnemy->move( 0, 5 );
		
		Window.draw( *dSEnemy );

		//Gegner löschen bei ungültiger Y-Position
		if( EnemyIt->getPosition().y > 660 )
		{
			EnemyListe.erase( EnemyIt );
			EnemyIt = EnemyListe.begin();
		}

	}
}

//-------------------------------------------------------------------------------------------------// **END**
//-------------------------------------------------------------------------------------------------// **END**
//-------------------------------------------------------------------------------------------------// **END**
Mfg,
Kosic

PS: Bitte vergebt mir, wenn ichs einfach gerade Übersehe oder ein Stück Code vergessen habe zu posten. Es ist schon spät und ich bin müde. Gute Nacht!
Kosic is offline  
Old 02/10/2013, 06:00   #2
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
Enemy::spawn_Enemy returnt nicht immer nen wert - meckert der compiler da nicht eh schon rum?
wie auch immer, nachdem die erste textur hinzugefügt wurde returnt spawn_Enemy i-nen mist, woraufhin in draw_enemy auf nen ungültigen pointer zugegriffen wird.
Dr. Coxxy is offline  
Thanks
1 User
Old 02/10/2013, 13:41   #3
 
elite*gold: 0
Join Date: Nov 2009
Posts: 343
Received Thanks: 45
warum macht man sowas wie
Code:
if( true )
sieht das cooler aus?
yihaaa is offline  
Old 02/10/2013, 13:50   #4
 
Schlüsselbein's Avatar
 
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
Wäre nicht schlecht, wenn du dein Problem auf das wesentliche enschränken würdest. Nicht jeder hat Lust, die Klassen einzeln auseinander zu nehmen.
Das Problem ist doch auch sicher in ein paar Zeilen reproduzierbar.
Schlüsselbein is offline  
Old 02/10/2013, 14:08   #5
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
Quote:
Originally Posted by yihaaa View Post
warum macht man sowas wie
Code:
if( true )
sieht das cooler aus?
macht man normalerweise wenn dort noch ein check reinkommt, der zu dem zeitpunkt aber noch nicht implementiert ist, einfach damit mans nachher einfacher wiederfindet, bzw. man dran denkt.

Quote:
Originally Posted by Schlüsselbein View Post
Wäre nicht schlecht, wenn du dein Problem auf das wesentliche enschränken würdest. Nicht jeder hat Lust, die Klassen einzeln auseinander zu nehmen.
Das Problem ist doch auch sicher in ein paar Zeilen reproduzierbar.
was hast du denn, er hats doch schon auf das nötigste reduziert?
und wie gesagt, wahrscheinliches problem hab ich oben schon beschrieben.

@TE:
der visual studio debugger kann zeilenweise im C++ code durchsteppen und laufzeitvariablen anzeigen.
das sollte helfen, das problem in zukunft selbst zu lösen.
Dr. Coxxy is offline  
Thanks
1 User
Old 02/10/2013, 15:26   #6
 
elite*gold: 0
Join Date: Jun 2011
Posts: 265
Received Thanks: 50
Quote:
Originally Posted by Dr. Coxxy View Post
macht man normalerweise wenn dort noch ein check reinkommt, der zu dem zeitpunkt aber noch nicht implementiert ist, einfach damit mans nachher einfacher wiederfindet, bzw. man dran denkt.
True. Denn später kommt dort die Abfrage rein ob Leben != 0 sind.

Mfg,
Kosic
Kosic is offline  
Old 02/10/2013, 15:37   #7
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
und?
Quote:
Enemy::spawn_Enemy returnt nicht immer nen wert - meckert der compiler da nicht eh schon rum?
wie auch immer, nachdem die erste textur hinzugefügt wurde returnt spawn_Enemy i-nen mist, woraufhin in draw_enemy auf nen ungültigen pointer zugegriffen wird.
war das der fehlerverursacher?
Dr. Coxxy is offline  
Old 02/10/2013, 15:41   #8
 
elite*gold: 0
Join Date: Jun 2011
Posts: 265
Received Thanks: 50
Bin gerade am rum Probieren.

#Edit
Wenn ich den Code so lasse und in der Main die draw_Enemy() Funktion auskommentiere, bekomme ich keine Fehler mehr. Ich frage mich nur, wie das Problem fixen kann, da es ja eine Liste ist und ich direkt mit den Variablen arbeiten muss. Deswegen immer bei den Übergabeparametern ein '&' vor dem Parameter. Also muss ich was returnen damit ich den Sprite in der draw_Enemy() Funktion wieder Übergeben kann.

Mfg,
Kosic
Kosic is offline  
Old 02/10/2013, 16:40   #9
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
was passiert wenn bei der funktion:

Code:
sf::Sprite* Enemy::spawn_Enemy( sf::Texture &sTEnemy, const int TextureX, const int TextureY )
{
	CenterX = ( TextureX / 2);
	CenterY = ( TextureY / 2);

	if( true )
	{
		if( SpawnTimer.getElapsedTime() > sf::seconds( 0.2 ) )
		{
			sf::Sprite *ESprite;
			ESprite = new sf::Sprite;
			ESprite->setTexture( sTEnemy );
			ESprite->setPosition( int_Randomizer( 20, 770 ), -50 );
			ESprite->setOrigin( CenterX, CenterY );

			EnemyListe.push_back( *ESprite );

			SpawnTimer.restart();

			return ESprite;
		}
	}
}
das hier:
Code:
if( SpawnTimer.getElapsedTime() > sf::seconds( 0.2 ) )
false ergibt?
es wird etwas zufälliges returnt.

hier(in der mainschleife):
Code:
SStone = Stone.spawn_Enemy( TStone, 30, 30 );
wird SStone also etwas zufälliges zugewiesen.
damit rufst du dann draw_enemy auf(auch in der mainschleife):
Code:
Stone.draw_Enemy( App, SStone );
in draw_enemy wird dann
Code:
dSEnemy->move( 0, 5 );
aufgerufen.
dSEnemy zeigt in dem moment ins nix und erzeugt obige access violation.

und bitte schau dir an, wie der vs debugger funktioniert, bzw. lern die sprache, sowas hat man normalerweise in 1 minute aufgespürt.
Dr. Coxxy is offline  
Old 02/10/2013, 17:30   #10
 
elite*gold: 0
Join Date: Jun 2011
Posts: 265
Received Thanks: 50
Oh mein Gott. Ich bin so dumm sorry... Fehler gefunden:

Hatte ganz vergessen, dass der Iterator eh in der Klasse ist und ich den eigentlich benutzen sollte
Kosic is offline  
Old 02/11/2013, 00:20   #11


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Quote:
Enemy::spawn_Enemy returnt nicht immer nen wert - meckert der compiler da nicht eh schon rum?
Nein, VS gibt dazu nur eine Warnung aus, die dir bei sonst erfolgreichen Compile-Vorgängen nicht auffallen bzw. ausgegeben werden, solange du Warnungen nicht als Fehler werten lässt.
MrSm!th is offline  
Reply


Similar Threads Similar Threads
[How-To] Stress aufgrund von Copyrights Verletzung bekommen.
02/22/2012 - Metin2 PServer Guides & Strategies - 34 Replies
Wie manche vllt mitbekommen haben, werden diese rüstungen: http://www10.pic-upload.de/18.02.12/vse5ph65ii4.j pg Zurzeit unter der Hand weitergegeben:
Verletzung der Privatsphäre & Co.
10/03/2011 - Off Topic - 1 Replies
Moin epvp, Ich weiß zwar, ihr seid kein juristisches Forum, aber dennoch möchte ich mal im Off-Topic fragen. Undzwar geht es darum, dass ich in nächster Zeit jemanden anzeigen möchte. Folgendes ist passiert: Der Täter verschaffte sich zunächst Zugang zu allen meinen Accounts: Steam, ICQ, eMail, usw. und änderte diese ab/verteilte sie in öffentlichen Foren. (Datendiebstahl, unbefugte Datenveränderung) Dann beschaffte er sich meine real Life daten (auf illegalem Wege, da ich diese niemals...
Copyright verletzung....
05/15/2008 - Main - 1 Replies
Abend, also ich mache nebenbei Level Service etc. bei WoW und habe mein eigenes Bilder, Avatar etc. Bilder und Avatare sind für jeden User wichtig damit man sich von anderen unterscheiden kann. Musste aber durch hilfe von Usern aus dem Forum erfahren das jemand mein Avatar hier benutzt ohne meine erlaubnis. Da der User nicht meine erlaubnis hat darf er das Avatar nicht benutzen. Den User den ich meine ist BloodyExtreme elitepvpers - View Profile: BloodyExtreme



All times are GMT +1. The time now is 19:19.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.