Eh, kolejny problem :/ I bynajmniej jest to dość dziwny błąd. Mianowicie, jak stworzę zmienną globalną typu Woltomierz (moja klasa główna) z parametrem("nazwa") i zamknę program w trakcie działania (tj. wszystko się wykona i program oczekuje na ostatni enter przed zakończeniem działania i wtedy zamknę konsolę) to gdy nie ma trybu debugowania włączenia po prostu wywala (wywala= program nieoczekiwanie zakończył działanie..) aplikację. A z włączonym debugowaniem wyświetla: Unhandled exception at 0x5C0E04A9 (msvcp120d.dll) in Projekt 1 - Woltomierz.exe: 0xC0000005: Access violation reading location 0xFEEEFEEE.
No i dla formalności plik z mainem tak wygląda:
#include "Woltomierz.h"
Woltomierz globalny("globalny");
int _tmain(int argc, _TCHAR * argv[])
{
std::cin.get();
std::cin.get();
}
Co ciekawe, gdy nie ma zmiennej globalnej, a zrobię to samo jak jest tylko zmienna lokalna to problemu nie ma. Z kolei dojście do końca programu (tj. bez zamykania konsoli) nie wywołuje żadnego erroru.
Pliki .h i .cpp wkleiłem w moim poprzednim poście (zmieniłem jedynie to, co Proxima zalecił), więc nie ma sensu tego powtarzać. Z rzeczy jeszcze, które mogą być pomocne, to jak ustawię breakpointa na
Woltomierz globalny("globalny");
oraz na konstruktor dla klasy Woltomierz
Woltomierz::Woltomierz(std::string nazwa)
{
wyswietlacz_LCD = new Wyswietlacz_LCD(); /* Alokuje pamiec dla podobiektu dynamicznego wyswietlacz_LCD */
this->nazwa = nazwa;
DEBUG_LOG("Konstruktor klasy Woltomierz uruchomiony!");
ile_obiektow++;
}
to po przejściu przez cały konstruktor wraca do
Woltomierz globalny("globalny");
a następny step to jest wejście do takiej pętli wgłąb jakiegoś pliku o nazwie crt0dat.c :
while ( pfbegin < pfend )
{
/*
* if current table entry is non-NULL, call thru it.
*/
if ( *pfbegin != NULL )
(**pfbegin)();
++pfbegin;
}
}
i następnie przechodzi przez to ileś razy (aczkolwiek nie wiem cóż to oznacza). Cóż źle zrobiłem? (jeśli jakiś plik jeszcze będzie potrzebny, to wkleję).