De operator "new" alloceerd dus geheugen voor een bepaald type. Nu wil ik hem gebruiken om een stukje te alloceren met een bepaalde grootte (vb: 8 bytes).
Ik heb een functie (heeel erg versimpelt) die ongeveer dit doet:
Mijn theory is dan:
Een "unsigned char" is 1 byte. Hij alloceerd dus een stukje van "size" bytes. Dit wordt gecast naar "void", zodat het overal voor te gebruiken is (die cast kan ik ook weglaten, maar ff voor het verhaal).
Als ik nou dit doe:
laat de printf-regel ook echt "12345678" zien !!
Dit zou niet mogen, er zijn 3 bytes gealloceerd, maar heeft er 8 (+1 voor de \0) nodig... Ook als ik "bla" weer vrijgeef en het proggie afsluit, gaat alles goed !! Hij zou volgens mij een access-violation moeten geven...
kan iemand mij dit uitleggen ??
Ik heb een functie (heeel erg versimpelt) die ongeveer dit doet:
code:
1
2
3
4
| void mem_alloc(void *&var, const int size)
{
var = (void *)unsigned char[size];
} |
Mijn theory is dan:
Een "unsigned char" is 1 byte. Hij alloceerd dus een stukje van "size" bytes. Dit wordt gecast naar "void", zodat het overal voor te gebruiken is (die cast kan ik ook weglaten, maar ff voor het verhaal).
Als ik nou dit doe:
code:
1
2
3
4
5
6
| ... char *bla = 0; mem_alloc((void *&)bla, 3); str.copy(bla, "12345678"); // deze werkt, echt waar :-) printf(bla); ... |
laat de printf-regel ook echt "12345678" zien !!
Dit zou niet mogen, er zijn 3 bytes gealloceerd, maar heeft er 8 (+1 voor de \0) nodig... Ook als ik "bla" weer vrijgeef en het proggie afsluit, gaat alles goed !! Hij zou volgens mij een access-violation moeten geven...
kan iemand mij dit uitleggen ??