Kan iemand deze toegepast-wiskundige-in-nood helpen? 
Ik ben een algoritme aan het implementeren in C++ (gebruik Dev-C++). Ik heb last van random crashes bij gebruik van het delete[]-statement. Ik heb al gezocht en dit kan een aantal oorzaken hebben; ik ben alleen niet in staat om mijn fout te vinden!
Idee achter dit stukje code is dat een twee cycles in een logistiek netwerk in één 'gepatcht' worden. Het probleem doet zich soms voor bij het delete[] statement in het midden, en soms op het eind. Soms ook niet.
Alvast bedankt!
Patch[0] en Patch[1] zijn niets anders anders de verwijzingen naar de desbetreffende cycles. Cycles[..][0] geeft de lengte van de cycle aan; de array moet dus Cycles[..][0]+1 groot zijn.
Ik ben een algoritme aan het implementeren in C++ (gebruik Dev-C++). Ik heb last van random crashes bij gebruik van het delete[]-statement. Ik heb al gezocht en dit kan een aantal oorzaken hebben; ik ben alleen niet in staat om mijn fout te vinden!
Idee achter dit stukje code is dat een twee cycles in een logistiek netwerk in één 'gepatcht' worden. Het probleem doet zich soms voor bij het delete[] statement in het midden, en soms op het eind. Soms ook niet.
Alvast bedankt!
Patch[0] en Patch[1] zijn niets anders anders de verwijzingen naar de desbetreffende cycles. Cycles[..][0] geeft de lengte van de cycle aan; de array moet dus Cycles[..][0]+1 groot zijn.
C++:
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
| void PatchCycles (int **Cycles, int &CycleCount, int *Patch) { int I, J; // Theoretisch is de plus 1 niet nodig, maar goed, voor de zekerheid Cycles[CycleCount+1] = new int[ Cycles[Patch[0]][0] + Cycles[Patch[1]][0] + 1 ]; // Cycle-patching gebeurd hier; nieuwe cycle wordt in Cycles[CycleCount+1] gegooid. // Array Cycles is groot genoeg (voor de zekerheid supergroot gemaakt om te checken) // Now replace the cycle with the lowest index by the cycle just created int Lowest, Highest; if (Patch[0] < Patch[1]) { Lowest = Patch[0]; Highest = Patch[1]; } if (Patch[0] > Patch[1]) { Lowest = Patch[1]; Highest = Patch[0]; } // Redefine the array with the lowest index ... delete[] Cycles[Lowest]; Cycles[Lowest] = new int[Cycles[CycleCount+1][0]+1]; // ... and copy the contents of the newly generated cycle for (I = 0; I <= Cycles[CycleCount+1][0]; I++) { Cycles[Lowest][I] = Cycles[CycleCount+1][I]; } // Move all arrays with an index higher than Highest one down if (Highest < CycleCount) { for (I = Highest; I < CycleCount; I++) { delete[] Cycles[I]; Cycles[I] = new int[Cycles[I+1][0]+1]; for (J = 0; J <= Cycles[I+1][0]; J++) { Cycles[I][J] = Cycles[I+1][J]; } } } // Delete the two highest delete[] Cycles[CycleCount]; delete[] Cycles[CycleCount+1]; CycleCount--; printf("Patching complete.\n"); } |
[ Voor 12% gewijzigd door moto-moi op 02-11-2005 00:11 . Reden: even de syntaxhighlighting aangezet :) ]
Geef mij maar een Warsteiner.