Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
fowly JLI'ler

Anmeldedatum: 25.01.2004 Beiträge: 196 Wohnort: Detmold - NRW Medaillen: Keine
|
Verfasst am: 14.04.2004, 23:18 Titel: Stl mag mich nicht |
|
|
Hi Leute,
ich arbeite zur Zeit viel mit der Stl. Aber irgendwie habe ich immer folgendes Problem.
Immer wenn ich (sowohl bei Listen als auch bei Maps) die Funktion .clear oder .erase aufrufe, gibt der Debugger einen Fehler aus:
Zitat: |
Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
|
an folgender Stelle:
Code: |
if (pHead->pBlockHeaderNext)
{
pHead->pBlockHeaderNext->pBlockHeaderPrev = pHead->pBlockHeaderPrev;
}
|
Das ganze passiert bei mir anscheinend auch nur bei Texturen. Ist das Problem bekannt, oder habe ich irgendwas falsch gemacht?
Kennt jemand die Antwort? _________________ <-- Noch in der Entwicklungsphase: http://www.uranus-entertainment.de -->
Das Spiel zu unserer Schule:
http://www.grabbe-game.de |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 15.04.2004, 19:54 Titel: |
|
|
Anhand von dem was du gepostet hast, kann ich leider nichts sagen.
Aber es scheint du nutzt kein STL sondern eine eigene Liste (mit den Pointer zuweisungen)
Ich bin kein Profi, aber bei STL kümmert sich glaub ich automatisch um solche Zeiger.
Wenn d alles mit new und delte machst und die Zeiger auf die Vorgänger/Nachfolger selber setzt, ist es schwieriger und fehleranfälliger. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 15.04.2004, 22:02 Titel: |
|
|
Stimmt, ich kann hier auch nichts erkennen, was mit der STL zu tun haben könnte...
PS: Vielleicht musst du die Texturen auch vorher mit Release() freigeben, bevor du sie aus der Liste/Map/etc... löschst  _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
 |
Christian Rousselle Site Admin

Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 16.04.2004, 00:03 Titel: |
|
|
Ich denke was er hier gepostet hat ist Quelltext aus der STL. Kann man trotzdem nicht viel zu sagen, ohne etwas meht Code zu sehen.
C. |
|
Nach oben |
|
 |
LeeDiGer Super JLI'ler

Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 29.08.2004, 00:31 Titel: |
|
|
Ich weiß echt nicht worans liegt:
Code: |
map<string,LPD3DXPMESH>::iterator result_m_lpMesh;
map<string,unsigned long>::iterator result_m_nNumMaterials;
map<string,D3DMATERIAL9*>::iterator result_m_lpMeshMaterials;
map<string,char**>::iterator result_m_lpMeshTextures;
// Nach dem Namen des Meshes suchen
result_m_lpMesh = m_lpMesh.find(lpMeshName);
result_m_nNumMaterials = m_nNumMaterials.find(lpMeshName);
result_m_lpMeshMaterials = m_lpMeshMaterials.find(lpMeshName);
result_m_lpMeshTextures = m_lpMeshTextures.find(lpMeshName);
|
Es kommt solch eine Fehlermeldung:
H:\c++\Space Arena\Ressourcen.cpp(114) : error C2228: left of '.find' must have class/struct/union type
H:\c++\Space Arena\Ressourcen.cpp(115) : error C2228: left of '.find' must have class/struct/union type
H:\c++\Space Arena\Ressourcen.cpp(116) : error C2228: left of '.find' must have class/struct/union type
H:\c++\Space Arena\Ressourcen.cpp(117) : error C2228: left of '.find' must have class/struct/union type
Woran könnte das denn liegen? _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
 |
PeaceKiller JLI Master

Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 29.08.2004, 12:20 Titel: |
|
|
Es liegt daran das die Listen nicht gültigsind. Rufst du diese Funktionen in der Klasse auf oder außerhalb? Wenn du sie außerhalb aufrufen willst empfehle ich dir das mit Zeigern zu machen. _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 29.08.2004, 12:54 Titel: |
|
|
Welchen Typ hat "m_lpMesh", "m_nNumMaterials", "m_lpMeshMaterials" und "m_lpMeshTextures"?
Sind das zufällig Zeiger auf ein STL-Container?
Dann musst du nämlich den Zugriffsoperator für Zeiger(->) verwenden
Zitat: | result_m_lpMesh = m_lpMesh->find(lpMeshName);
result_m_nNumMaterials = m_nNumMaterials->find(lpMeshName);
result_m_lpMeshMaterials = m_lpMeshMaterials->find(lpMeshName);
result_m_lpMeshTextures = m_lpMeshTextures->find(lpMeshName);
|
_________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
 |
LeeDiGer Super JLI'ler

Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 29.08.2004, 15:35 Titel: |
|
|
Die Deklaration erfolgt in der Header-Datei:
Code: |
// diese Map speichert den Namen und den Zeiger auf die Textur
map<string,LPD3DXPMESH> m_lpMesh;
map<string,unsigned long> m_nNumMaterials;// Anzahl der Materialien
map<string,D3DMATERIAL9*> m_lpMeshMaterials;// das Array der Materialien
map<string,char**> m_lpMeshTextures;// das Array mit den Texturnamen
|
Deshalb wunder ich mich, warum das nicht geht.
So was ähnliches gabs ja auch schon in dem 2. JLI-buch:
Code: |
// diese Map speichert den Namen und den Zeiger auf die Textur
map<string,LPDIRECT3DTEXTURE9> m_MapTextures;
|
und
Code: |
// Iterator für die Suche in der Map
map<string,LPDIRECT3DTEXTURE9>::iterator result;
// Nach dem Namen der Textur suchen
result = m_MapTextures.find(lpTextureName);
// diese Map speichert den Namen und den Zeiger auf die Textur
|
Das mit "->" funktioniert übrigens auch nicht. _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
 |
HotAcid Super JLI'ler

Alter: 43 Anmeldedatum: 04.08.2002 Beiträge: 372 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 29.08.2004, 17:10 Titel: |
|
|
Code: | using namespace std; |
hast du drin, oder? _________________ StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht. |
|
Nach oben |
|
 |
LeeDiGer Super JLI'ler

Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 29.08.2004, 18:28 Titel: |
|
|
Das ist auf jedenfall drin, sonst gäbe es noch vielmehr Compilerfehler. _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
 |
LeeDiGer Super JLI'ler

Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 29.08.2004, 18:58 Titel: |
|
|
Ok, ok. Ich hab den Fehler selbst gefunden. Der Fehler lag in einem Konflikt von Dateinamen. _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
 |
LeeDiGer Super JLI'ler

Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 29.08.2004, 19:24 Titel: |
|
|
Neues Problem:
Wie löscht man Elemente aus einer Map?
Bei Listen sah das ja in etwa so aus:
Code: |
for(it=m_ShotsList.begin();it!=m_ShotsList.end();it++)
{
delete (*it);
}
|
Bei Maps klappts so jedenfalls nicht. Wie gehts dann? _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 29.08.2004, 20:55 Titel: |
|
|
LeeDiGer hat Folgendes geschrieben: | Wie löscht man Elemente aus einer Map?
[...]
Bei Maps klappts so jedenfalls nicht. Wie gehts dann? |
Vielleicht liegts daran, dass die Funktion erase() heißt
Jedenfalls sollte es funktionieren, wenn du das so machst:
Code: | map<int,int> mymap;
mymap.erase(*it); |
Mit delete kannst du nur Objekte entfernen, die du per new erstellt hast  _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
 |
LeeDiGer Super JLI'ler

Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 30.08.2004, 00:40 Titel: |
|
|
Hmm, klappt irgendwie nicht. Es kommt solch eine Fehlermeldung:
error C2664: 'class std::_Tree<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::all
ocator<char> > const ,struct _D3DMATERIAL9 *>,struct std::map<class
.....
Den Rest erpar ich dir. Jedenfalls wars ein netter Vorschlag. _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 30.08.2004, 11:53 Titel: |
|
|
Zeig doch mal den Lösch-Code und die Zeile, in der der Fehler auftritt
Dann können wir schon mehr sagen... _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
 |
|