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.

questionAnswers(4)

yourAnswerToTheQuestion