Ostatnio rozszerzałem jeden program w Qt w Windows z MinGW32, w jednej klasie, której obiekt jest tworzony na stosie (deklaracja zmiennej obiektu bez gwiazdki) dodałem kilka tablic statycznych o wielkości kilkadziesiąt kilobajtów, teraz trudno mi powiedzieć, ile pamięci jest przeznaczone na zmienne i tablice na stosie (deklaracja bez gwiazdki), ale to będzie rząd od kilkudziesięciu do kilkuset Kb.
Program kompiluję jako Release, ostatnio, jak dodałem jedną tablicę, to program w ogóle się nie uruchamiał (ale się kompilował), był błąd "SIGSEV Segmentation fault". Jak skasowałem dodatkową tablicę, to program się uruchomił. Jak zmieniłem typ tablicy z int na unsigned char (w tym przypadku wystarczył typ unsigned char), to program się uruchomił i działał poprawnie. Jak w konstruktorze tej klasy, a także w konstruktorze klasy zawierającej pole będące obiektem przedmiotowej klasy dodałem wypisanie jakiegoś napisu za pomocą cout, to nic się nie wypisało, jakby błąd wystąpił jeszcze przed zbudowaniem obiektu nadrzędnego (przed uruchomieniem konstruktora). Co może być przyczyną i z czego wynika ograniczenie wielkości struktur na stosie? Akurat z opcją Debug nie testowałem, ale spróbuje, może pokaże coś więcej.
Kiedy indziej, miałem taki przypadek, że poprawność działania programu zależała od kolejności podania pól i deklaracji metod w pliku nagłówkowym. Problem pojawiał się czasem, jak dopisałem nowe pole lub nową metodę (program się kompilował i uruchamiał, ale zaraz na początku się wywalał lub wywalał się po uruchomieniu jakiejś funkcji), ale jak przemieściłem na koniec, to problem nie występował. Jedyna przyczyna, jaka mi przychodzi do głowy, to próba zapisania lub odczytu elementu którejś tablicy ponad jej wielkość i wtedy w pamięci operacyjnej występuje treść innego pola lub zapis kodu metody i próba odczytu bądź zapisu powoduje problem. Czy jest możliwa też inna przyczyna tego problemu?
Program teraz działa poprawnie. Czy jest możliwe i na ile prawdopodobne, że pierwszy problem wróci w sytuacji, gdy będę chciał skompilować program na system inny niż Windows (jeszcze tego nie testowałem, bo nie potrzebuję i nie mam dostępu do Linuxa ani OSX)?