sander the man
Gebruiker
- Lid geworden
- 7 jun 2007
- Berichten
- 94
Ik heb een probleem met een class. Als ik een functie in een class gebruik krijg ik de error: 0xC0000005 (memory access violation). Dat betekent dat ik geheugen gebruikt dat niet bij mijn programma behoord. Maar het rare is dat als ik precies dezelfde functie uit de class haal en als gewone functie maak hij het perfect doet. Ik wil hem juist in een class gebruiken.
Dit is mijn class code die ik gebruik:
Code:
class config
{
public:
double res, fr, gr, position_iterations, velocity_iterations, contact_threshold, velocity_threshold, bias_factor;
void init_poly_block_32_16();
void init_poly_block_64_32();
void init_poly_block_96_32();
void init_poly_block_96_64();
double world;
void init();
};
void config::init()
{
res = 0.2;
fr = 0.6;
gr = 0.1;
position_iterations = 0;
velocity_iterations = 20;
contact_threshold = 0.1;
velocity_threshold = 0.5;
bias_factor = 0.2;
init_poly_block_32_16();
init_poly_block_64_32();
init_poly_block_96_32();
init_poly_block_96_64();
world = ep_world_create();
}
void config::init_poly_block_32_16()
{
std::cout << "debug 2" << std::endl;
double poly_block_32_16 = ep_polygon_create();
ep_polygon_addvertex(poly_block_32_16,-16,-8);
std::cout << "debug 3" << std::endl;
ep_polygon_addvertex(poly_block_32_16,+16,-8);
ep_polygon_addvertex(poly_block_32_16,+16,+8);
ep_polygon_addvertex(poly_block_32_16,-16,+8);
std::cout << "debug 4" << std::endl;
ep_polygon_init(poly_block_32_16);
std::cout << "debug 5" << std::endl;
}
void config::init_poly_block_64_32()
{
double poly_block_64_32 = ep_polygon_create();
ep_polygon_addvertex(poly_block_64_32,-32,-16);
ep_polygon_addvertex(poly_block_64_32,+32,-16);
ep_polygon_addvertex(poly_block_64_32,+32,+16);
ep_polygon_addvertex(poly_block_64_32,-32,+16);
ep_polygon_init(poly_block_64_32);
}
void config::init_poly_block_96_32()
{
double poly_block_96_32 = ep_polygon_create();
ep_polygon_addvertex(poly_block_96_32,-48,-16);
ep_polygon_addvertex(poly_block_96_32,+48,-16);
ep_polygon_addvertex(poly_block_96_32,+48,+16);
ep_polygon_addvertex(poly_block_96_32,-48,+16);
ep_polygon_init(poly_block_96_32);
}
void config::init_poly_block_96_64()
{
double poly_block_96_64 = ep_polygon_create();
ep_polygon_addvertex(poly_block_96_64,-48,-32);
ep_polygon_addvertex(poly_block_96_64,+48,-32);
ep_polygon_addvertex(poly_block_96_64,+48,+32);
ep_polygon_addvertex(poly_block_96_64,-48,+32);
ep_polygon_init(poly_block_96_64);
}
Alle debug messages worden geprint behalve debug 1. Het gaat dus fout bij de functie`s:
init_poly_block_32_16();
init_poly_block_64_32();
init_poly_block_96_32();
init_poly_block_96_64();
Weet iemand hoe ik dit kan oplossen? En ik gebruik code-blocks. En de functies die ik uitvoer komen uit een dll.
Edit: Het gebeurt ook als ik het in een losse functie doe zonder class. Het werkt alleen als ik geen functie maak maar gewoon de:
Code:
poly_block_96_64 = ep_polygon_create();
ep_polygon_addvertex(poly_block_96_64,-48,-32);
ep_polygon_addvertex(poly_block_96_64,+48,-32);
ep_polygon_addvertex(poly_block_96_64,+48,+32);
ep_polygon_addvertex(poly_block_96_64,-48,+32);
ep_polygon_init(poly_block_96_64);
Gebruik.
Edit2: Ik merk nu dat dit niet alleen bij de functie ep_polygon_addvertex(poly_block_96_64,-48,-32); voorkomt maar bij ALLE functies die een waarde opslaan in de library.
Edit3: Heb nu de dll normaal geladen met LoadLibrary(); etc. En ik krijg precies dezelfde foutmelding...
Edit4: Door alles nog eens goed door te nemen en door de msdn door te lezen zag ik een waarschuwing dat dit kon gebeuren. Toen ik kijk naar het exampletje dat erbij stond bleek ik CALLBACK te zijn vergeten in de typedef... Het is nu opgelost

Laatst bewerkt: