Problem z nadpisywaniem pamięci
Mam jedną aplikację kodu C. które budowałem za pomocą MS-VS2005. Miałem jeden bufor danych wyjściowych, który był przydzielany dynamicznie przy użyciu malloc.
W niektórych przypadkach testowych rozmiar pamięci, który był mallocd, był krótki niż rzeczywisty rozmiar wyjściowy w bajtach, który został wygenerowany. To większe wyjście zostało zapisane w buforze o mniejszym rozmiarze, powodującym przepełnienie bufora. W wyniku tego test uruchomił się z powodu MSVS-2005 pokazującego okno „Zniszczenie sterty…”
Wiedziałem, że ma to związek z pewną dynamiczną alokacją pamięci, ale zajęło mi dużo czasu, aby znaleźć przyczynę źródłową, ponieważ nie wątpiłem w alokację pamięci, ponieważ przydzielałem wystarczająco duży rozmiar niezbędny do wyjścia. Ale jeden konkretny przypadek testowy generował więcej wyników niż to, co obliczyłem, stąd wynikowy błąd.
Moje pytanie brzmi:
1.) Jakie narzędzia mogę użyć do wykrycia takich warunków nadmiernego przepływu bufora pamięci dynamicznej. Czy mogą również pomóc w wykryciu jakichkolwiek warunków przepełnienia bufora (niezależnie od tego, czy bufor / tablica jest na stercie, stosie, globalnym obszarze pamięci)?
2.) Czy narzędzia wycieku pamięci (np. Purify) lub narzędzia do analizy kodu, takie jak szarpie, klocworks, pomogłyby w konkretnym przypadku? Uważam, że muszą zostać uruchomione narzędzia do analizy czasu.
Dziękuję Ci.
-OGŁOSZENIE.