Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

1

25.06.2013, 16:09

[C++ & std::vetor] Problem beim Befüllen des Vectors

Moin meine Frage heute ist warum sich mein Vector nicht füllen läst bzw. warum das Programm dabei abstürtzt

TextureUnit.h

C-/C++-Quelltext

1
2
3
private:
vector<unsigned int> VectorGlobTextureUnit;
    vector<unsigned int>::iterator VectorGlobTextureUnitIter;


und die Beiden Funktionen

C-/C++-Quelltext

1
VectorGlobTextureUnit.push_back(0);

C-/C++-Quelltext

1
2
3
4
5
int returnTextureUnit;
    int O = 0;
    O = VectorGlobTextureUnit.back();
    returnTextureUnit = O +1;
    VectorGlobTextureUnit.push_back(returnTextureUnit);


Jetzt noch einmal genauer zu meinem Problem. Ich lege im Konstruktor einen Wert in den Vector, so weit so gut jetzt lasse ich den Vector über eine zweite Funktion auslesen und dann ist dort nichts mehr drin, es gibt keinen speicher mehr für diesen vector. Ich kann mir nicht erklären warum dort plötzlich nichts mehr drinnen ist, acuh dnicht nach langem Debuggen.

Würde mich sehr über Hilfe freuen
Volker

Greek

Frischling

Beiträge: 18

Wohnort: Nähe Darmstadt

Beruf: Informatik-Student

  • Private Nachricht senden

2

25.06.2013, 16:43

Also da sehe ich kein Fehler, bräuchten wohl noch mehr von deinem Code, legst du den Vector vielleicht im Konstruktor an?

Das geht ohne Probleme:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
    std::vector<unsigned int> VectorGlobTextureUnit;
    std::vector<unsigned int>::iterator VectorGlobTextureUnitIter;
    
    VectorGlobTextureUnit.push_back(0);
    
    while (VectorGlobTextureUnit.back() != 10) {
        VectorGlobTextureUnit.push_back(VectorGlobTextureUnit.back() + 1);
    }
    
    for (VectorGlobTextureUnitIter = VectorGlobTextureUnit.begin(); VectorGlobTextureUnitIter!=VectorGlobTextureUnit.end(); ++VectorGlobTextureUnitIter) {
        std::cout << *VectorGlobTextureUnitIter << std::endl;
    }

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

3

25.06.2013, 21:34

Nein ich mache damit nichts mehr es gibt noch eine Funktion die aber noch nicht aufgerufen wird, ist für später, sonst noch jemand ne Idee?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

25.06.2013, 21:42

Am besten wird's sein Du editierst Deinen Code da oben weg. Je weniger Code wir haben, desto mehr können wir rätseln und in's Blaue spekulieren.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

25.06.2013, 21:48

Was genau heißt "es gibt keinen Speicher mehr für den vector"? Was passiert genau, wo genau passiert es und inwiefern widerspricht es deiner Erwartung?

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

6

25.06.2013, 22:46

Ich habe nicht mehr Code ich könnte noch aufschreiben wie diese beiden Funktionen aufgerufen werden aber das wars dann auch. Ich habe ein Objekt das keinen speicher mehr zugeortnet hat also nicht mehr auf auf die in ihm gespeicherten Objekt/Informationen zugreifen kann.

7

25.06.2013, 22:56

:|
Zeig mal den Konstruktor und die Funktionen, mit Funktionskopf zur Zuordnung welche welche ist.

MfG
Check

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

26.06.2013, 06:45

Ein vector<unsigned int> hat mit Speicher eines Objekts gar nichts zu tun, weil Dein unsigned int nicht im Heap liegt. Ohne Code dürfen wir wie gesagt nur raten. Und wenn ich raten müsste, würde ich sagen, dass Du irgendwas mit einem unique_ptr total falsch machst oder mit einer Kopie des vektors arbeitest.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

9

26.06.2013, 11:45

Ich poste jetzt noch einmal alles, was ich an Code habe.

SystemClass, erzeugen einerDynamischen Instanz der TextureUnitClass.

C-/C++-Quelltext

1
GlobTexturUnit = new TextureUnitClass;

Der Pointer GlobTextureUnit ist Global und liegt in der TextureUnitClass.h

TextureUnitClass.h mit allen funktionen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
class TextureUnitClass
{
public:
    TextureUnitClass(void);
    ~TextureUnitClass(void);
    int GetNewTextureUnit ();
    void DeleteTextureUnit (int);
private:
    vector<unsigned int> VectorGlobTextureUnit;
    vector<unsigned int>::iterator VectorGlobTextureUnitIter;
};

static TextureUnitClass* GlobTexturUnit;


Und die dazugehörige .cpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
TextureUnitClass::TextureUnitClass(void)
{
    if(!VectorGlobTextureUnit.empty())
    {
        VectorGlobTextureUnit.erase(VectorGlobTextureUnit.begin(), VectorGlobTextureUnit.end());
    }
    VectorGlobTextureUnit.push_back(0);
    int A = NULL;
    return;
}

TextureUnitClass::~TextureUnitClass(void)
{
    if (!VectorGlobTextureUnit.empty())
    {
        VectorGlobTextureUnit.clear();
    }
}

int TextureUnitClass::GetNewTextureUnit ()
{
    int returnTextureUnit;
    int O = 0;
    O = VectorGlobTextureUnit.back();
    returnTextureUnit = O +1;
    VectorGlobTextureUnit.push_back(returnTextureUnit);

    return returnTextureUnit;
}

//Funktion wird zurzeit noch nicht benutzt
void TextureUnitClass::DeleteTextureUnit (int TextureUnit)
{
    for(VectorGlobTextureUnitIter = VectorGlobTextureUnit.begin(); VectorGlobTextureUnitIter != VectorGlobTextureUnit.end();
        VectorGlobTextureUnitIter ++)
    {
        if(TextureUnit == *VectorGlobTextureUnitIter)
        {
            VectorGlobTextureUnit.erase(VectorGlobTextureUnitIter);
            VectorGlobTextureUnitIter = VectorGlobTextureUnit.end();
        }
    }
    return;
}


Zu guter letzt der Aufruf aus der ButtonClass

C-/C++-Quelltext

1
TextureUnit = GlobTexturUnit->GetNewTextureUnit();


Das ist jetzt alles was ich habe vielleicht könnt ihr mir ja damit weiter Helfen ich würde mich sehr freun

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

26.06.2013, 11:49

Und wo ist jetzt das Problem? Dass in GlobTexturUnit nix drin steht? Denn da schreibst Du nie was rein.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige