Archief - C++ pointer probleem - logica ontgaat me

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Xoliul

Legacy Member
Ik probere het hier eens, ik zit compleet vast voor mijn herexamen C++ en mijn docent antwoord niet terwijl de tijd dringt. Dit probleem gaat mijn petje te boven, hopelijk kan iemand mij hier iets helpen. Ik gebruik VS2005.

Ik heb de volgende functie in een klasse:
Code:
void TileListParser::AddTile2List(std::wstring attname, std::wstring value)
{
	if(attname==_T("name"))
	{
		HLSLMaterial* pmaterial= new HLSLMaterial(m_pTerrainEffect);
		tstring texpath;
		tstringstream buffer;
		buffer<<_T("Level/Tiles/");
		buffer<<value;
		buffer<<_T(".tga");
		buffer>>texpath;
 
		LPDIRECT3DTEXTURE9 tiletex;
		if(SUCCEEDED( D3DXCreateTextureFromFile(m_pd3dDevice,texpath.c_str(),&tiletex) )) 	
		{
			pmaterial->SetParameter(_T("diffuseTexture"),tiletex);
		}
		m_MaterialMap->insert(make_pair(value,pmaterial));
	}
}

Probleem is nu, die pmaterial wordt nooit aangemaakt.

Paar screens van als ik breakpoints zet:

Prog runt, breakpoint staat waar de pointer wordt ingevuld. Let erop dat in de lijst met Locals onderaan, geen spoor van pmaterial te zien is, wel van alle andere tijdelijke variabelen.


hier heb ik één keer op F10 geduwt. Nog steeds geen pmaterial te zien, het lijkt alsof de pointer van tiletex wel ingevuld wordt ofzo, maar dat lijkt me echt helemaal te gek.

Gevolg is dat vanaf dat de pmaterial pointer wordt aangesproken, ik een standaard exception krijg van een niet ingevulde pointer.

Ik heb al met F11 jump into gedaan voor de constructor van HLSLMaterial; dit werkt en verloopt voor zover ik zie zonder problemen. Ook al 3 keer Clean solution + Rebuild All gedaan.

Eerder had ik net zo'n probleem in deze klasse met een tstring die ik op de stack maakte in een functie: het was compleet onmogelijk die in te vullen, hij bleef <bad_ptr> staan. Oplossing was hem in de .h te declareren, en dan aan te spreken in de functie. Kan ik in dit geval echter niet doen, omdat dan voor zover ik zie de pointer altijd overschreven gaat worden ? Zowiezo wil ik dit fixed.

killgore

Legacy Member
Je debugt in een echte debug setting mag ik hopen? En niet in een veredelde release setting? Want het kan nogal eens gebeuren dat in releases zaken weggeoptimaliseerd worden, wat je debuggen extra moeilijk maakt (niet dat uw fout daarvan afhangt, maar zou wel het verdwijnen van die local kunnen verklaren).

Voor de rest is dit echt bizar, zulke fouten zijn inderdaad normaal gezien opgelost door een clean. Ik zou zeggen: sluit die file (alle files) eens af en doe dan een clean. Windows programma's hebben nogal de neiging tijdelijke versies van openstaande documenten te maken en dat kan soms wel eens mislopen.

Xoliul

Legacy Member
Man, Killgore, heel erg bedankt! Al je suggesties hebben het gefixt! Ik stond inderdaad in release te compilen omda de performance dan een veelvoud beter is, en gewoon niet bij stilgestaan dat ik dat beter terugzette. Ook klap ik mijn laptop altijd toe in standby mode als ik ga slapen, en doe hem de volgende dag gewoon weer open, en sluit ik geen enkel programma. Nu heb ik dus geleerd dat dat niet zo'n goed idee is.
Nogmaals bedankt, ben maar één dagje kwijt hierdoor :)

killgore

Legacy Member
No problem, compilatie is soms nogal tricky :p. Ik ken mensen die gebuisd zijn vorig jaar door dergelijke zaken bij ons :(.

Veel succes met je examen :niceone:
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan