AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Klasse und EInvalidPointer

Ein Thema von apoc · begonnen am 12. Dez 2004 · letzter Beitrag vom 12. Dez 2004
Antwort Antwort
apoc

Registriert seit: 12. Dez 2004
7 Beiträge
 
#1

Problem mit Klasse und EInvalidPointer

  Alt 12. Dez 2004, 15:14
Also ich habe eine Klasse in einer Unit, mein Problem ist das ich einen EInvalidPointer-Fehler bekomme ohne ersichtlichen Grund. In meiner Hauptunit tue ich nicht viel ich lege ein neues Objekt der Klasse an und führe eine Funktion der Klasse aus. Ich bekomme auch eine Warnung das das Objekt möglicherweise nicht Initialisiert wurde, aber ich möchte/brauche und habe keinen Konstruktor/Dekonstruktor ?!

Diese Funktion legt die größe eines Dynamischen Arrays von einem Record fest. Das Funktioniert nur wenn ich das Array in "public" anlege, warum ? wenn ich es als private anlege funktioniert es nicht. Dabei sollte es eigendlich private sein und das die Funktion als public definiert ist sollte doch wohl auch keine Probleme machen. Ich frage mich weshalb da Object Pascal einen unterschied macht.

So, also wenn ich es als public definiere komme ich wenigstens ans ende der Funktion erst wenn ich aus der Funktion wieder zurück zur Hauptunit springe kommt der Fehler und das Programm bricht ab. Also eigendlich ist es eine procedure und sie scheint auch zu funktionieren.
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#2

Re: Problem mit Klasse und EInvalidPointer

  Alt 12. Dez 2004, 15:29
Du musst keinen eigenen Constructor definieren. Allerdings musst du ein Objekt ganz normal mit Variable:=TKlasse.Create erstellen. Wenn du nur eine Variable hast, wird das Objekt selber noch nicht angelegt.

Delphi-Quellcode:
var
  myObj: TMyClass;
begin
  myObj:=TMyClass.Create;
  // Mache was mit myObj

  // Speicher wieder freigeben.
  myObj.Free;
[edit]Zumindestens Warnungen sollte man ernst nehmen. Es sind nicht umsonst Warnungen
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
apoc

Registriert seit: 12. Dez 2004
7 Beiträge
 
#3

Re: Problem mit Klasse und EInvalidPointer

  Alt 12. Dez 2004, 15:37
danke schonmal für die schnelle Antwort
also ich hab das jetzt eingebunden was du gesagt hast aber der fehler kommt leider immernoch.
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#4

Re: Problem mit Klasse und EInvalidPointer

  Alt 12. Dez 2004, 15:40
Tja, dann. Quellcode her. Wahrsagen können wir nicht
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#5

Re: Problem mit Klasse und EInvalidPointer

  Alt 12. Dez 2004, 15:41
HI!

Herzlich Willkommen in der DP.

Wie sieht denn dein Quellcode im Moment aus? Poste ihn am besten mal hier.


Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
apoc

Registriert seit: 12. Dez 2004
7 Beiträge
 
#6

Re: Problem mit Klasse und EInvalidPointer

  Alt 12. Dez 2004, 15:52
ok also hier die Klasse (auszugsweise)

Delphi-Quellcode:
unit Bricks;

interface

uses
  SysUtils,
  IniFiles;

type
brick = record
   x, y : Integer;         // x, y Position des Bricks (auf dem Bildschirm)
  world_y : Integer;       // die y Welt koordinate
  w, h : Integer;         // die Breite und Höhe, Breite muss durch 16 teilbar sein
 (...)
end;

{* Diese Klasse ist für das Anlegen, Zeichnen und Bewegen der
* Bricks zuständig.
*}

TBricks = class

   private
      {* zugriff auf die Brick INI Datei
       *}

    iniFile : TIniFile;

  public

     {* In diesem dynamischen Array von Bricks sind alle Bricks gespeichert
       *}

      bricks : Array of brick;

    {* läd die INI Datei im Filename, legt entsprächend viele bricks an und
    * speichert die Daten in dem bricks Array
       *}

     procedure CreateFromINI(Filename : String);


end;

implementation

{* läd die INI Datei im Filename, legt entsprächend viele bricks an und
* speichert die Daten in dem bricks Array
*}

procedure TBricks.CreateFromINI(Filename : String);
var i,i2 : Integer;
    i2str : String;
begin
  iniFile := TIniFile.Create(ExtractFilePath(ParamStr(0))+Filename);

  Write('Suche Bricks in '+Filename+'...');

  // suche nach Bricks in Datei und speichere die Anzahl in i
  i := 1;
  while iniFile.ReadString('brick'+IntToStr(i), 'x', 'NULL') <> 'NULLdo
    Inc(i);
  Dec(i);

  Writeln(IntToStr(i)+' Brick gefunden');

  // um Speicherleaks zu vermeiden wird setLength nur einmal aufgerufen
  setLength(bricks,i);

  Write('Speichere Bricks in dynamisches Array...');

  for i2 := 1 to i do
  begin
    i2str := IntToStr(i2);

    bricks[i2].x           := StrToInt(iniFile.ReadString('brick'+i2str, 'x', '0'));
    bricks[i2].world_y := StrToInt(iniFile.ReadString('brick'+i2str, 'world_y', '0'));
    bricks[i2].w           := StrToInt(iniFile.ReadString('brick'+i2str, 'w', '0'));
    bricks[i2].h           := StrToInt(iniFile.ReadString('brick'+i2str, 'h', '0'));
 (...)
  end;

  Writeln('done');

  iniFile.Free;
end;


end.
so und hier die unit die die klasse aufruft

Delphi-Quellcode:
program main;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Bricks in 'Bricks.pas';

var
  OBricks : TBricks;

begin
  { TODO -oUser -cConsole Main : Hier Code einfügen }

  OBricks:=TBricks.Create;

  OBricks.CreateFromINI('bricks.ini');

  OBricks.Free;
end.
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#7

Re: Problem mit Klasse und EInvalidPointer

  Alt 12. Dez 2004, 16:00
dynamische Arrays in Delphi beginnen bei 0. Du musst also deine Schleife ändern:

for i2 := 0 to i-1 do
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
apoc

Registriert seit: 12. Dez 2004
7 Beiträge
 
#8

Re: Problem mit Klasse und EInvalidPointer

  Alt 12. Dez 2004, 16:13
das wars dann wohl jetzt funktionierts ! also big thx !
Irgendwie ist das mit den Arrays in Delphi ziemlich verwirrend. Normalerweise programmiere ich in C/C++ nur jetzt halt weil ich das in meiner Ausbildung lerne und da haben sie uns erzählt das Delphi bei Arrays mit 1 anfängt zu zählen. Naja wie auch immer jetzt funzt es ja.

Das ging ja echt mal schnell mit der Lösung meines Problems. Tolle Community ich hoffe das ich auch irgendwann mal was dazu beitragen kann
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#9

Re: Problem mit Klasse und EInvalidPointer

  Alt 12. Dez 2004, 17:20
Zitat von apoc:
dda haben sie uns erzählt das Delphi bei Arrays mit 1 anfängt zu zählen.
Glaube nicht alles was du hörst

Bei statischen Arrays mag das stimmen, da man dort den Index selber festlegen kann.

z.B.:
Delphi-Quellcode:
type
  TTestArray = Array[1..10] of Integer
Dann würde der Index auch tatsächlich erst bei eins anfangen. Aber in allen anderen Fällen mit 0.
Nicht das da jemand Delphi mit VB verwechselt hat :roll2:
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz