Ik ben bezig met een programma waarbij het LZW compressie en decompressie algoritme wordt gebruikt. Op zich werkt dat best goed, alleen zit ik met een extreem wazige bug die ik niet op kan lossen.
In de decompressie-functie wordt er gebruik gemaakt van een Map (int, string) (en een Trie) om de dictionary op te slaan. In de loop die de input verwerkt wordt er een lookup gedaan:
Dit gaat meestal goed, totdat in sommige testfiles er ineens een segmentation fault optreedt.
Door het toevoegen van debug output kwam ik erachter dat er een corrupte string terug komt uit de map in zeldzame gevallen. Als ik kijk hoe lang die string is dan kom ik uit op een string van lengte 134695976. Het verbaast mij niet dat dit een segfault oplevert natuurlijk, maar hoe het komt, ik heb geen idee.
Toen ik met valgrind wilde gaan kijken wat er precies gebeurde bij de segfault merkte ik echter nog iets veel vreemders. Het gebruikt van valgrind zorgt ervoor dat het programma een foutloze outputfile wegschrijft. Het gaat dus helemaal goed ineens. Heeft iemand een idee wat er hier aan de hand is? Ik snap het echt niet meer op het moment.
In de decompressie-functie wordt er gebruik gemaakt van een Map (int, string) (en een Trie) om de dictionary op te slaan. In de loop die de input verwerkt wordt er een lookup gedaan:
C++:
1
| k = dict.find(input)->second; |
Dit gaat meestal goed, totdat in sommige testfiles er ineens een segmentation fault optreedt.
Door het toevoegen van debug output kwam ik erachter dat er een corrupte string terug komt uit de map in zeldzame gevallen. Als ik kijk hoe lang die string is dan kom ik uit op een string van lengte 134695976. Het verbaast mij niet dat dit een segfault oplevert natuurlijk, maar hoe het komt, ik heb geen idee.
Toen ik met valgrind wilde gaan kijken wat er precies gebeurde bij de segfault merkte ik echter nog iets veel vreemders. Het gebruikt van valgrind zorgt ervoor dat het programma een foutloze outputfile wegschrijft. Het gaat dus helemaal goed ineens. Heeft iemand een idee wat er hier aan de hand is? Ik snap het echt niet meer op het moment.
The NS has launched a new space transportation service, using German trains which were upgraded into spaceships.