hey, misschien is iemand van jullie al een soortgelijk probleem tegengekomen en kan me helpen dit op te lossen. ik heb een applicatie die op een bepaald moment een reeks berekeningen uitvoert op een 2 dimensionele array, de eerste keer dat het algoritme loopt gaat alles meestal goed, de tweede keer begint de code echter "heen en weer te springen" (zoals ik kon zien door de code stap voor stap uit te voeren).
dus vereenvoudigt:
hij loopt alles netjes door en dan gaat hij plots van opdracht 4 naar 2 dan naar 6 terug naar 3, en hop terug normaal en dan spring spring hop hop tot hij natuurlijk ergens een Invalid Access of een null-reference tegenkomt.
iemand een idee wat dit gedrag kan veroorzaken en hoe het te verhelpen ?
Edit: iets meer code, heb er enkele lange sommaties uitgeknipt
Edit2: Nog voor de volledigheid - Visual Studio 2008 met .Net 2.0
dus vereenvoudigt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
| float sunMin = getMinimumBrightness((System.Drawing.Bitmap)bmp.Clone());
float sunMax = getMaximumBrightness((System.Drawing.Bitmap)bmp.Clone());
float SUNDISC_TRESHOLD_LOW = getTresholdLow(sunMin, sunMax);
float SUNDISC_TRESHOLD_HIGH = getTresholdHigh(sunMin, sunMax);
float totMaxedDifferences = 0f;
float countedPixels = 0;
bool foundTop;
bool foundBottom;
for (int x = 2; x < bmp.Width - 2; x++)
{
foundTop = false;
foundBottom = false;
int y = 2;
while (!(foundTop && foundBottom))
{
int y1 = y;
int y2 = bmp.Height - y - 1;
if (!foundTop)
{
float val1 =
(float)((bmp.GetPixel(x - 2, y1 - 2).GetBrightness()
.... knip sommatie ....
) / 25);
if ((val1 > SUNDISC_TRESHOLD_LOW) && (val1 < SUNDISC_TRESHOLD_HIGH))
{
float maxDif = ... knip sommatie ...
totMaxedDifferences = totMaxedDifferences + maxDif;
countedPixels++;
//bmp2.SetPixel(x, y, System.Drawing.Color.Pink);
}
if (val1 > SUNDISC_TRESHOLD_HIGH)
{
foundTop = true;
}
}
if (!foundBottom)
{
float val2 =
(float)((bmp.GetPixel(x - 2, y2 - 2).GetBrightness()
.... knip sommatie ....
) / 25);
if ((val2 > SUNDISC_TRESHOLD_LOW) && (val2 < SUNDISC_TRESHOLD_HIGH))
{
float maxDif = .... knip sommatie ...
totMaxedDifferences = totMaxedDifferences + maxDif;
countedPixels++;
}
if (val2 > SUNDISC_TRESHOLD_HIGH)
{
foundBottom = true;
}
}
y++;
if (y == bmp.Height / 2) { foundBottom = true; foundTop = true; }
}
} |
hij loopt alles netjes door en dan gaat hij plots van opdracht 4 naar 2 dan naar 6 terug naar 3, en hop terug normaal en dan spring spring hop hop tot hij natuurlijk ergens een Invalid Access of een null-reference tegenkomt.
iemand een idee wat dit gedrag kan veroorzaken en hoe het te verhelpen ?
Edit: iets meer code, heb er enkele lange sommaties uitgeknipt
Edit2: Nog voor de volledigheid - Visual Studio 2008 met .Net 2.0
[ Voor 63% gewijzigd door Verwijderd op 19-12-2007 11:38 ]