Witam,
Mam opracowany losowy generator nazw.
Po skompilowaniu testowej aplikacji z wykorzystaniem GCC (zainstalowanym razem z Code::Blocks), program działa stabilnie - a przynajmniej na to wygląda.
Po skompilowaniu tej samej aplikacji z wykorzystaniem kompilatora stanowiącego część Visual Studio 2005 (nie jestem w stanie ustalić nazwy tego "wynalazku"), pierwsze dwie nazwy generowane są poprawnie po czym aplikacja sypie się z powodu błędów pamięci.
Problem udało mi się sprowadzić do dwóch linii kodu:
Problem w tym że nie mam pojęcia dlaczego jest taka różnica w zachowaniu programu.
manifest.dataStart wskazuje - a przynajmniej powinien - na początek bloku pamięci zawierającego załadowany plik tekstowy. Nie jest wykorzystywany poza dictionary_init().
appendPointer przy zwalnianiu w namegen_cleanup() ustawiony został na początek 256-elementowej tablicy znaków która była wykorzystywana jako bufor do którego generator wpisywał wyniki.
Według mojej intencji, żaden z tych wskaźników nie powinien być nigdzie indziej zwalniany ani modyfikowany.
Czy problem jest skutkiem jakiegoś błędu który przeoczyłem w moim kodzie, czy też jest to wina Visual Studio?
W załączniku jest aplikacja razem z plikami projektów Visual Studio i Code::Blocks.
Mam opracowany losowy generator nazw.
Po skompilowaniu testowej aplikacji z wykorzystaniem GCC (zainstalowanym razem z Code::Blocks), program działa stabilnie - a przynajmniej na to wygląda.
Po skompilowaniu tej samej aplikacji z wykorzystaniem kompilatora stanowiącego część Visual Studio 2005 (nie jestem w stanie ustalić nazwy tego "wynalazku"), pierwsze dwie nazwy generowane są poprawnie po czym aplikacja sypie się z powodu błędów pamięci.
Problem udało mi się sprowadzić do dwóch linii kodu:
Kod: C / C++
Kod: C / C++
Problem w tym że nie mam pojęcia dlaczego jest taka różnica w zachowaniu programu.
manifest.dataStart wskazuje - a przynajmniej powinien - na początek bloku pamięci zawierającego załadowany plik tekstowy. Nie jest wykorzystywany poza dictionary_init().
appendPointer przy zwalnianiu w namegen_cleanup() ustawiony został na początek 256-elementowej tablicy znaków która była wykorzystywana jako bufor do którego generator wpisywał wyniki.
Według mojej intencji, żaden z tych wskaźników nie powinien być nigdzie indziej zwalniany ani modyfikowany.
Czy problem jest skutkiem jakiegoś błędu który przeoczyłem w moim kodzie, czy też jest to wina Visual Studio?
W załączniku jest aplikacja razem z plikami projektów Visual Studio i Code::Blocks.