Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Memory tracken

Pagina: 1
Acties:

  • Bint
  • Registratie: Juli 2002
  • Laatst online: 30-11 17:32
Ik ben op dit moment met een applicatie te schrijven, maar nu heb ik het probleem dat ik een corrupte heap krijg als een bepaalde functie is uitgevoerd..

C:
1
2
3
4
5
6
7
8
9
10
11
while( !_kbhit() )
  {         
    
    // knip
    int **A; // 2 dimensional array, 360 * maxRange
    
    A = HoughTransform(pDisplayImagePixels, 1280, blobs[biggest], pDisplayImagePixels);

    free(A);
    // knip 
  }  



foutmelding:
Windows has encountered a breakpoint in App.exe
This may be due to a corruption in the heap and indicates a bug in App.exe or any DLLs it has loaded.

The output window may have more diagnostic information
Dat breakpoint is niet geset, dus daar kan het niet aan liggen.
Als ik de Houghtransform uitvoer, dan gaat alles nog goed. Maar op het moment dat de loop voor de 2e keer weer begint, komt er een heap error op !_kbhit().

Voer ik de houghtransform niet uit, dan gaat alles goed. Enig idee waar dit aan zou kunnen liggen? Gebruik ik misschien teveel geheugen ofzo?

Nu ben ik dus eigenlijk op zoek naar een tooltje waarmee ik het gebruikte geheugen kan controloeren. Heeft iemand hier iets voor?

[ Voor 6% gewijzigd door Bint op 21-08-2007 13:03 ]

Memories of yesterday, will grow, but never die


  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Als je een IDE gebruikt die breakpoints ondersteunt kan je toch door je code heen steppen? Dan zul je waarschijnlijk ook vrij snel kunnen zien waar het aan ligt.

Sole survivor of the Chicxulub asteroid impact.


  • remco_k
  • Registratie: April 2002
  • Laatst online: 08:28

remco_k

een cassettebandje was genoeg

Rare code. -> int **A;
Waar word 'A' gealloceerd? (aangezien je ook free() doet).
Het lijkt erop dat A nu niet word gealloceerd, waardoor de free() dus memory freed waar ie eigenlijk niet aan mag komen en dat geeft de meest vreemde problemen.
Vertel even in welke IDE je werkt. Zet even een functie zoals codeguard aan en het word meteen duidelijk.

Wat geeft HoughTransform voor waarde terug? (linkje naar documentatie)

Alles kan stuk.


  • Bint
  • Registratie: Juli 2002
  • Laatst online: 30-11 17:32
@AtleX: met dat steppen ben ik er achtergekomen dat er in _kbhit() eruit wordt geklapt, dat had ik ook al verteld ;)

@remco_k:
die int **A die wordt geinitialiseerd is een pointer naar een 2 dimensionaal array. Dat wordt teruggegeven door de HoughTransform.

die free had ik er even tussengezet om het geheugen weer vrij te maken :)

Memories of yesterday, will grow, but never die


  • remco_k
  • Registratie: April 2002
  • Laatst online: 08:28

remco_k

een cassettebandje was genoeg

Ik mis nog wat zaken;
-Welke IDE?
-Codeguard (oid) geprobeerd?
-Documentatie HoughTransfom.

Waar word die A dan geinitialiseerd? Ik zie het niet. Of doet HoughTransform dat? (vandaar dat ik ook naar de docs vraag).

[ Voor 83% gewijzigd door remco_k op 21-08-2007 13:50 ]

Alles kan stuk.


  • Bint
  • Registratie: Juli 2002
  • Laatst online: 30-11 17:32
Ik gebruik Visual Studio .Net 2005 als IDE.
codeguard heb ik nog nooit gebruikt.
HoughTransform is een functie die ik zelf heb geschreven. Ik gebruik deze transformatie om de vergelijkingen rechte lijnen te kunnen detecteren in een image.

die **A wordt daar ook geinitialiseerd.
het 2-dimensionale array van A stelt het volgende voor:

de loodrechte lijn vanuit de oorsprong die op een lijn staat in een image. Deze wordt gekenmerkt door:
een hoek (i) en een lengte. De maximale lengte is rMax. Documentatie heb ik verder niet over HoughTransform, omdat ik deze nog niet geschreven heb ;)

**A wordt in beginsel met allemaal nullen gevuld:
dit gebeurt als volgt:

C:
1
2
3
4
5
6
7
8
9
10
A = (int **)malloc(360 * sizeof(int *));
    
for(int i=0; i < 360; i++)
{
    A[i] = (int *)malloc((rMax + 1) * sizeof(int));
    for(int t = 0; t<(rMax+1); t++)
    {
        A[i][t] = 0;
    }
}


Ik ben inmiddels al wat verder:
Heap corruption detected at 011EFED8
HEAP[App.exe]: HEAP: Free Heap block 11efed0 modified at 11efee0 after it was freed

Memories of yesterday, will grow, but never die


  • PaveloW
  • Registratie: September 2005
  • Laatst online: 14:52
Even voor de zekerheid een paar dingen :
- is volgens mij wel handig om alles wat je van malloc terugkrijgt op !=NULL te checken, malloc kan (in principe) mislukken.
- De free van A in de while loop klopt zowiezo niet met de hoeveelheid geheugen die je malloc'd. In principe free je nou alleen maar deze

[code=c]
A = (int **)malloc(360 * sizeof(int *));
[/code=c]

maar de malloc die je in de for loop doet wordt niet gefreed.

Ben zelf niet zo bekend met Hough Transformations, maar wat wil je nou precies opslaan in die 2d array?

(je zou ook nog naar 'calloc' en/of 'memset' kunnen kijken)

[ Voor 15% gewijzigd door PaveloW op 23-08-2007 16:40 . Reden: stille hints ]

Pagina: 1