AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Programm stürtzt ab...

Ein Thema von wayne312 · begonnen am 26. Aug 2009 · letzter Beitrag vom 27. Aug 2009
Antwort Antwort
Seite 1 von 2  1 2   
wayne312

Registriert seit: 11. Jul 2009
27 Beiträge
 
#1

Programm stürtzt ab...

  Alt 26. Aug 2009, 19:14
Hi leute,

ersma sorry falls ich im falschen bereich gepostet habe...
Also mein problem ist, dass mein programm immer abstürtzt sobald ich eine bestimmte procedure ausführe :

Delphi-Quellcode:
procedure GetServerMap;
var
buffer : byte;
Stream1 : TMemoryStream;
bsize : integer;
begin
Stream1 := TMemoryStream.Create;
Form1.IdUDPClient1.Send('ÿÿÿÿTSource Engine Query');
bsize := Form1.IdUDPClient1.ReceiveBuffer(buffer,sizeof(buffer));
Stream1.WriteBuffer(buffer,bsize);
Stream1.Position:=Length(Form1.sLabel5.Caption)+7;
Form1.sLabel6.Caption:=ReadString(Stream1);
Form1.sLabel6.Visible:=True;
Form1.IdUDPClient1.Free;
Stream1.Free;
end;
Sobald ich GetServerMap aufrufe geht das programm mit dieser nachricht aus : "Access violation at address 00465808 in module 'Project1.exe'. Read of address 00000078'."

Und ich werde auf folgende zeile hingewiesen :
bsize := Form1.IdUDPClient1.ReceiveBuffer(buffer,sizeof(buffer)); Wo ist der fehler?

mfg
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Programm stürtzt ab...

  Alt 26. Aug 2009, 19:19
Wo rufst Du die Methode auf? Form1 könnte ggf. = nil sein ...

Edit: Spätestens beim 2. Aufruf der Methode muss es krachen, denn du machst
Form1.IdUDPClient1.Free; und erstellst das Objekt nicht neu.
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
wayne312

Registriert seit: 11. Jul 2009
27 Beiträge
 
#3

Re: Programm stürtzt ab...

  Alt 26. Aug 2009, 19:25
Ersma danke für die antwort
also ich wollte die procedure nur einmal direkt am start aufrufen (bis jetzt)...

Jetzt hab ichs einfach mal so geschrieben :
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
buffer : byte;
Stream1 : TMemoryStream;
bsize : integer;
begin

Stream1 := TMemoryStream.Create;
IdUDPClient1.Send('ÿÿÿÿTSource Engine Query');
bsize := IdUDPClient1.ReceiveBuffer(buffer,8192);
Stream1.WriteBuffer(buffer,bsize);
Stream1.Position:=Length(sLabel5.Caption)+7;
sLabel6.Caption:=ReadString(Stream1);
sLabel6.Visible:=True;
Stream1.Free;
end;
Nur es geht leider immernoch nicht...
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Programm stürtzt ab...

  Alt 26. Aug 2009, 19:31
Setz mal einen Haltepunkt an die erste Zeile. Wenn Du in der Fehlerzeile bist, könntest Du prüfen (einfach Mauszeiger drüber bewegen), ob die Variable = nil ist... sonst poste mal die Fehlerzeile -- Hast Du die Indy-Komponente einfach aufs Form gepappt oder erstellt Du die selbst? Wie rufst Du das Form auf - oder wird es automatisch aufgerufen?

Viele Grüße,

David
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.314 Beiträge
 
Delphi XE7 Professional
 
#5

Re: Programm stürtzt ab...

  Alt 26. Aug 2009, 19:37
.. kann es vielleicht daran liegen, dass dein Buffer nur ein (1) Byte groß ist
und Du da 8Kbit hineinschreiben willst.
ReceiveBuffer erwartet in der Regel TidBytes was einem Array of Bytes entspricht.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
wayne312

Registriert seit: 11. Jul 2009
27 Beiträge
 
#6

Re: Programm stürtzt ab...

  Alt 26. Aug 2009, 19:42
Also ich habe den idUDPClient einfach auf die Form1 gesetzt, die sowieso erstellt wird.
Die "bruchstelle" ist :
bsize:=Form1.IdUDPClient1.ReceiveBuffer(buffer,8192); und wenn ich den Mauszeiger über "buffer" halte erscheint keine meldung, aber über idUDPCLient1 wird gesagt das es nil ist.

PS: ich habe schon folgende procedure :

Delphi-Quellcode:
procedure GetServerName;
begin
Form1.idUDPClient1.Send('ÿÿÿÿTSource Engine Query');
Form1.sLabel5.Caption:=(Form1.idUDPClient1.ReceiveString(-1));
Form1.sLabel5.Caption:=StringReplace(Form1.sLabel5.Caption,'ÿÿÿÿI','',[rfReplaceAll]);
Form1.sLabel5.Visible:=True;
Form1.idUDPClient1.Send('ÿÿÿÿi');
Form1.sLabel3.Caption:=(Form1.idUDPClient1.ReceiveString(-1));
if Form1.sLabel3.Caption=('ÿÿÿÿj00000000000000') then begin
Form1.sLabel3.Caption:=('ON');
Form1.sLabel3.Font.Color:=(clGreen);
end
else
Form1.sLabel3.Caption:=('OFF');
end;
Aber bei der gibt es keine schwierigkeiten...

Edit1 // wenn ich idGobal bei uses hinschreibe und dann TidBytes verwende kommt nur : Undeclared identifier: 'TidBytes'...

mfg
  Mit Zitat antworten Zitat
wayne312

Registriert seit: 11. Jul 2009
27 Beiträge
 
#7

Re: Programm stürtzt ab...

  Alt 27. Aug 2009, 16:44
So hab das ganze jetzt mal ein wenig umgeschrieben :

Delphi-Quellcode:
procedure GetServerMap;
var
s,bsize : integer;
a : TBytes;
Stream1 : TMemoryStream;
map : string;
begin
Stream1 := TMemoryStream.Create;
s:=16384;
SetLength(a,s);
if Form1.sLabel3.Caption=('ON') then begin
Form1.IdUDPClient1.Send('ÿÿÿÿTSource Engine Query');
bsize := Form1.IdUDPClient1.ReceiveBuffer(a,s);
Stream1.WriteBuffer(a,bsize);
Stream1.Position:=Length(Form1.sLabel5.Caption)+7;
ShowMessage(ReadString(Stream1));
Stream1.Free;
end
else
ShowMessage('Der Server ist momentan Offline');
Stream1.Free;
end;
So und ich bin durchgegangen : Die ganze Procedure läuft durch und die Nachricht mit "map" wird auch angezeigt, nur bei der zeile "end;" bekomm ich die
Fehlermeldung : "Access violation at address 00405AE4 in module 'Project1.exe'.Write of address FFFFFFF7."

Aber wieso?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
26.876 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: Programm stürtzt ab...

  Alt 27. Aug 2009, 16:51
Du gibst den Stream ggf. 2 mal frei. Versuch es mal so:
Delphi-Quellcode:
procedure GetServerMap;
var
  s,bsize : integer;
  a : TBytes;
  Stream1 : TMemoryStream;
  map : string;
begin
  Stream1 := TMemoryStream.Create;
  try
    s:=16384;
    SetLength(a,s);
    if Form1.sLabel3.Caption=('ON') then begin
      Form1.IdUDPClient1.Send('ÿÿÿÿTSource Engine Query');
      bsize := Form1.IdUDPClient1.ReceiveBuffer(a,s);
      Stream1.WriteBuffer(a,bsize);
      Stream1.Position:=Length(Form1.sLabel5.Caption)+7;
      ShowMessage(ReadString(Stream1));
    end
    else
      ShowMessage('Der Server ist momentan Offline');
  finally
    Stream1.Free;
  end;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
wayne312

Registriert seit: 11. Jul 2009
27 Beiträge
 
#9

Re: Programm stürtzt ab...

  Alt 27. Aug 2009, 17:32
ersma danke für die antwort.. nur leider gehts immernochnicht auch wenn ich 2. Stream1.Free; mache ... er führt alles aus aber wenn die prozedur zu ende ist kommt die meldung
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
34.931 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

Re: Programm stürtzt ab...

  Alt 27. Aug 2009, 17:40
Zitat:
Stream1.WriteBuffer(a,bsize);
vermutlich, weil du dir mit solchen Dingen den Stack oder sonstwas zerschießt?

Code:
// zeigt auf den internen Zeiger bzw auf die Variable
[color=silver]var[/color] a
@a

// zeigt auf die Daten des Arrays
[color=silver]var[/color] a[0]
@a[0]
PS: das mit dem a[0] ist nur ein Beispiel, denn ich hab jetzt nicht nachgesehn, ob du sowas auch noch an anderer Stelle machst
(z.B. mit anderen Strings und dynamischen Arrays)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf