|
You last visited: Today at 19:18
Advertisement
C++ Zugriffsrecht Verletzung
Discussion on C++ Zugriffsrecht Verletzung within the C/C++ forum part of the Coders Den category.
02/10/2013, 04:57
|
#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!
|
|
|
02/10/2013, 06:00
|
#2
|
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.
|
|
|
02/10/2013, 13:41
|
#3
|
elite*gold: 0
Join Date: Nov 2009
Posts: 343
Received Thanks: 45
|
warum macht man sowas wie
sieht das cooler aus?
|
|
|
02/10/2013, 13:50
|
#4
|
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.
|
|
|
02/10/2013, 14:08
|
#5
|
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
|
Quote:
Originally Posted by yihaaa
warum macht man sowas wie
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
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.
|
|
|
02/10/2013, 15:26
|
#6
|
elite*gold: 0
Join Date: Jun 2011
Posts: 265
Received Thanks: 50
|
Quote:
Originally Posted by Dr. Coxxy
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
|
|
|
02/10/2013, 15:37
|
#7
|
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?
|
|
|
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
|
|
|
02/10/2013, 16:40
|
#9
|
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.
|
|
|
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:
void Enemy::spawn_Enemy( sf::Texture &sTEnemy, const int TextureX, const int TextureY )
{
CenterX = ( TextureX / 2);
CenterY = ( TextureY / 2);
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();
}
}
void Enemy::draw_Enemy( sf::RenderWindow &Window )
{
for(EnemyIt = EnemyListe.begin(); EnemyIt != EnemyListe.end(); EnemyIt++)
{
EnemyIt->move( 0, 5 );
Window.draw( *EnemyIt );
//Gegner löschen bei ungültiger Y-Position
if( EnemyIt->getPosition().y > 660 )
{
EnemyListe.erase( EnemyIt );
EnemyIt = EnemyListe.begin();
}
/*Collision von Spieler und Gegner
if( Collision::PixelPerfectTest( SPlayer, *EnemyIt ) )
{
EnemyListe.erase( EnemyIt );
EnemyIt = EnemyListe.begin();
Leben--;
Punkte -= 20;
}*/
}
}
Hatte ganz vergessen, dass der Iterator eh in der Klasse ist und ich den eigentlich benutzen sollte
|
|
|
02/11/2013, 00:20
|
#11
|
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.
|
|
|
 |
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.
|
|