Pfff, ik ben er weer... een assertion failure waarbij ik geen code kan leveren...
Mijn programma werkte naar behoren, totdat ik besloot dat ik een buffer voor zoekresultaten wilde maken (die gebruik maakte van dynamisch geheugen, anders liep t btje uit de hand). Ik definieerde een typedef struct, maakte een pointer naar die struct, deed een malloc die ik typecaste naar een pointer naar die struct en ik was reuze blij... de compiler gaf geen errors.
Ik gebruikte bij het statische geheugen altijd de syntax resultaat[x].waarde en die kon ik blijkbaar nog hanteren want de compiler gaf geen error toen ik het deed bij dynamisch geheugen...
Totdat ik het programma starte. Hier krijg ik voordat er maar iets gebeurd de melding :
Debug assertion failed
Program: *.exe
File: dbgheap.c
Expression: _CrtIsValidHeapPointer(pUserData)
De debugger zei dit (voordat ie starte):
First-chance exception in v300v400.exe (KERNEL32.DLL): 0xC0000005: Access Violation.
Kan iemand mij uitleggen wat een 'heap' is, zodat ik uit kan zoeken waar ik in de fout ben gegaan?
Hmmm... ik denk dat het toch ff verstandig is wat andere dingetjes er bij te zeggen:
VC++ compiler, ik schrijf voornamelijk c maar vind af en toe c++ wel handig om functies uit die taal er in te proppen. Beetje c/c++ mix dus.
Ik definieer t volgens deze manier:
Dit was mijn oude manier:
*update*
Het lijkt alsof het mis gaat tijdens het toekennen van de pointer, dus als ik met die zelfgedefineerde struct een pointer 'zoek' toewijs...
Mijn programma werkte naar behoren, totdat ik besloot dat ik een buffer voor zoekresultaten wilde maken (die gebruik maakte van dynamisch geheugen, anders liep t btje uit de hand). Ik definieerde een typedef struct, maakte een pointer naar die struct, deed een malloc die ik typecaste naar een pointer naar die struct en ik was reuze blij... de compiler gaf geen errors.
Ik gebruikte bij het statische geheugen altijd de syntax resultaat[x].waarde en die kon ik blijkbaar nog hanteren want de compiler gaf geen error toen ik het deed bij dynamisch geheugen...
Totdat ik het programma starte. Hier krijg ik voordat er maar iets gebeurd de melding :
Debug assertion failed
Program: *.exe
File: dbgheap.c
Expression: _CrtIsValidHeapPointer(pUserData)
De debugger zei dit (voordat ie starte):
First-chance exception in v300v400.exe (KERNEL32.DLL): 0xC0000005: Access Violation.
Kan iemand mij uitleggen wat een 'heap' is, zodat ik uit kan zoeken waar ik in de fout ben gegaan?
Hmmm... ik denk dat het toch ff verstandig is wat andere dingetjes er bij te zeggen:
VC++ compiler, ik schrijf voornamelijk c maar vind af en toe c++ wel handig om functies uit die taal er in te proppen. Beetje c/c++ mix dus.
Ik definieer t volgens deze manier:
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| typedef struct { int nummer; char naam[30]; } onthoudzoeken; onthoudzoeken *zoek; int main() { //dynamisch geheugen opvragen: zoek = (onthoudzoeken*) malloc(sizeof(onthoudzoeken) * 10); //ff wat wijzigen ter demonstratie: zoek[9].nummer = 10; return 0; } |
Dit was mijn oude manier:
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| typedef struct { int nummer; char naam[30]; } onthoudzoeken; onthoudzoeken zoek[10]; int main() { //ff wat wijzigen ter demonstratie: zoek[9].nummer = 10; return 0; } |
*update*
Het lijkt alsof het mis gaat tijdens het toekennen van de pointer, dus als ik met die zelfgedefineerde struct een pointer 'zoek' toewijs...
[ Voor 12% gewijzigd door Xorgye op 03-04-2006 13:30 . Reden: *update* ]