blad po kompilacji

0

"Project nazwa.exe raised exception class EAccessViolation with message 'Access violation at address 0049B01D in module 'NAZWA.EXE'. Read of address FFFFFFFF'. Process stopped..."

  • moze ktos wie dlaczego po skompilowaniu (podczas dzialania programu) wyskakuje mi taki blad i wskazuje na linie [code] Serv.XiRC1.Say('#asd','dsa'); [/code] (Serv : TServerForm;), ogolnie gdy probuje sie odwolac do jakiej kolwiek procedurki komponentu XiRC1 to wtedy wyskakuje mi taki blad. Komponent XiRC1 jest umieszczony na formie TServerForm, zas [code] Serv.XiRC1.Say('#asd','dsa'); [/code] jest na TChannelForm. Chcialbym takze dodac ze nie chodzi mi o demo2 dolaczone do komponentu XiRC (irc client) ale o program ktory sam napisalem przy uzyciu tego komponentu. Sprawdzilem juz czy czegos moze nie zrobilem ale jest on zrobiony na takiej samej zasadzie co demo2.
    Z gory dzieki za odpowiedz!!!
0

To przy czym ci pokazuje błąd to akurat przy takich błędach nie ma większego znaczenia. Kiedyś, gdy podobnego błędu szukałem w b4p spędziłem nad tym kilka godzin. Nie masz innego wyjścia jak analiza krok po kroku w miejcu, gdzie przewidujesz błąd. Błedy takie najczęściej są powodowane przez złą alokację pamięci (lub jej brak). Mogę jedynie dawać wskazówki. Prawdopodobnie błąd jest gdzieś znacznie wcześniej niż wskazuje na to kompilator.

0

Jeżeli zmienna Serv jest TServerForm (var Serv : TServerForm;) to sprawdż czy na początku procedury nie brakuje czegoś takiego:

begin
Serv := TServerForm.Create(Owner);

0

sprawdz, czy nie odwołujesz się do nie utworzonego jeszcze elementu

0

ja mialem cos takiego.
czesciowo usunąlem ten błąd poprzez usuniecie kilku zmiennych i zmienieniu ich typów.

sprawdz czy program się kompiluje (nie Run tylko Compile) i uruchom go ręcznie

0

co do analizy kodu to jest to 24 strony A4 (juz wydrukowalem - tak latwiej sie analizuje) wiec za kilka dni powiem wam czy sie udalo...
co do tego ze odwołuje się do nie utworzonego jeszcze elementu to tez nie bo on jest juz utworzony. Mam pewien pomysl ale on moze tez nie dzialac jezeli cos wymysle to Od razu sie tym pochwale...

0

Lepiej jest Debugowac, a nie drukowac kod. Ustawiasz po prostu breakpoints, gdzie podejrzewasz błąd i potem analizujesz zmienne, co jest nie tsk.

0

WIEM!!! znalazlem!!! po prostu byl sobie taki fragment, na formie TServerForm:
[code]
FF := TChannel.Create(self);
with TChannel(FF) do
begin
Tag := TServerForm(self).tag;
end;
[/code]

a powinien byc taki
[code]
FF := TChannel.Create(self);
with TChannel(FF) do
begin
Tag := TServerForm(self).tag;
Serv := Self;
end;
[/code]

gdzie FF to TForm, a Serv to TServerForm, ktory znajduje sie na TChannel.
Dizekuje wszystkim za pomoc!!!

Glupota nie boli!!!

1 użytkowników online, w tym zalogowanych: 0, gości: 1