Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ошибка памяти, Project My.exe raised excepytion class.. 
:(
    Опции темы
UMmi
Дата 19.11.2006, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 5.11.2006
Где: МО

Репутация: -1
Всего: 0



Проект состоит из нескольких форм. Компиляция и выполнение происходят хорошо. После же выключения exe-ка выдает такую ошибку: Project My.exe raised excepytion class EAccessViolation with message 'Acces violation at address 0040319A in module 'My.exe'. Read of address 000000AE'. Process stopped. Use Step... и т.д.
Я первый раз работаю с несколькими формами, может я в одной из них или где-то непрописал какую-нибудь очистку памяти или что-нибудь такое?

Спасибо за помощь!
PM   Вверх
Bose
Дата 19.11.2006, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



ошибка в 17й строке smile 

Причин может быть сколько угодно.  Как вариант возможно ты обращаешься к ещё не созданному или уже уничтоженному объекту. Давай код, будем смотреть. smile 
PM MAIL WWW Skype   Вверх
UMmi
Дата 19.11.2006, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 5.11.2006
Где: МО

Репутация: -1
Всего: 0



Цитата(Bose @ 19.11.2006,  18:53)
ошибка в 17й строке smile 

Причин может быть сколько угодно.  Как вариант возможно ты обращаешься к ещё не созданному или уже уничтоженному объекту. Давай код, будем смотреть. smile

Боюсь это мало что даст. Я проверил по новому:
в проекте две формы - все работает ок. Добавляю еще одну форму(любую) TForm1 (ее описывает Unit1) - пишу в main обработку кнопки по клик : Form1.ShowModal. Всё. Запускаю, работаю, выключаю - вылетает ошибка. Прикол даже такой, что если исключить из проекта вторую форму и оставить новую третью всё опять ок... Т.е. проект работает отказывается нормально работать более чем с двумя формами..(?)
PM   Вверх
UMmi
Дата 19.11.2006, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 5.11.2006
Где: МО

Репутация: -1
Всего: 0



Код

unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ActnCtrls, ToolWin, ActnMan, ActnMenus,
  XPStyleActnCtrls, ActnList, ImgList, description, ExtCtrls, ComCtrls,
  XPMan, AppEvnts, Grids, RbDrawCore, RbRadioButton, RbCheckBox, RbSplitter,
  RbPanel, RbButton;

type
  TFormMain = class(TForm)
    ImageList: TImageList;
    AManager: TActionManager;
    AMainMenu: TActionMainMenuBar;
    ATool: TActionToolBar;
    Status: TStatusBar;
    Scroll: TScrollBox;
    Paint: TPaintBox;
    XPManifest: TXPManifest;
    UpDownSq: TUpDown;
    EditSq: TEdit;
    LBPix: TLabel;
    UpDownSh: TUpDown;
    EditSh: TEdit;
    LBShadow: TLabel;
    GraphClean: TAction;
    GraphUndo: TAction;
    About: TAction;
    Exit: TAction;
    ApplicationEvents: TApplicationEvents;
    Matrsm: TAction;
    MSmg1: TStringGrid;
    RbCheckBox1: TRbCheckBox;
    RbStyleManager1: TRbStyleManager;
    RbBn1: TRbButton;
    RbButton1: TRbButton;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure PaintMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure PaintMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure PaintPaint(Sender: TObject);
    procedure EditSqChange(Sender: TObject);
    procedure EditShChange(Sender: TObject);
    procedure GCleanUpdate(Sender: TObject);
    procedure GUndoUpdate(Sender: TObject);
    procedure GCleanExecute(Sender: TObject);
    procedure ExitExecute(Sender: TObject);
  {  procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);  }
    procedure GUndoExecute(Sender: TObject);
    procedure ApplicationEventsIdle(Sender: TObject; var Done: Boolean);
    procedure AboutExecute(Sender: TObject);
    procedure MUpdate(Sender: TObject);
    procedure MExecute(Sender: TObject);
    procedure RbCheckBox1Click(Sender: TObject);
    procedure RbBn1Click(Sender: TObject);
    procedure RbButton1Click(Sender: TObject);


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FormMain: TFormMain;
  PixList : TPixList;
  G : TG;
  Ves, GRi: TA50;
  Pix:integer;
  procedure zap;
implementation

uses about, d_v, Unit1;

var
...


Unit1: все ОК до того момента, как только мне стоит написать в main uses ..Unit1;
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

end.

PM   Вверх
Sunvas
Дата 19.11.2006, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



UMmi, скажу честно - ты проявляешь редкую толстолобную дубовизну. Ибо преведенный код main, который заканчивается
Цитата(UMmi @  19.11.2006,  21:47 Найти цитируемый пост)
uses about, d_v, Unit1;    
var    
...

для нас не имеет никакого смысла.



--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
UMmi
Дата 19.11.2006, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 5.11.2006
Где: МО

Репутация: -1
Всего: 0



Цитата(Sunvas @ 19.11.2006,  21:53)
UMmi, скажу честно - ты проявляешь редкую толстолобную дубовизну. Ибо преведенный код main, который заканчивается
Цитата(UMmi @  19.11.2006,  21:47 Найти цитируемый пост)
uses about, d_v, Unit1;    
var    
...

для нас не имеет никакого смысла.

Не отвечай за других, на этом форуме, думаю, есть боле умные и опытные люди))(прочитай прошлый мой пост - там ясно сказано, что вообще не важно что там есть(пусть даже после var нет ниодной процедуры и только end:) - все равно вылетает)
PM   Вверх
Sunvas
Дата 19.11.2006, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Тебе помочь пытаюсь, а ты вокруг горшка танцуешь. Ты привел бесполезный код из которого я вижу что у тебя там куча процедур и перменных, и никто кроме тебя не знает что ты там мутил. Вот ради эксперимента, создай пустой проект и попытайся прицепить к нему форму. Если будет такая же ошибка, то значит дело в настройках делфи, если все будет нормально работать, то дело в коде адназначна!

Цитата(UMmi @  19.11.2006,  22:01 Найти цитируемый пост)
думаю, есть боле умные и опытные люди

Ты имеешь в виду телепаты?


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Snowy
Дата 20.11.2006, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(UMmi @  19.11.2006,  18:26 Найти цитируемый пост)
Read of address 000000AE
ИМХО, два раза вызываешь деструктор.
Либо уничтожаешь не через Free.
Либо пытаешься обращаться к уничтоженному объекту.
PM MAIL   Вверх
UMmi
Дата 20.11.2006, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 5.11.2006
Где: МО

Репутация: -1
Всего: 0



Цитата(Snowy @ 20.11.2006,  00:30)
Цитата(UMmi @  19.11.2006,  18:26 Найти цитируемый пост)
Read of address 000000AE
ИМХО, два раза вызываешь деструктор.
Либо уничтожаешь не через Free.
Либо пытаешься обращаться к уничтоженному объекту.

и там искал.

Добавлено @ 01:11 
Код

unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ActnCtrls, ToolWin, ActnMan, ActnMenus,
  XPStyleActnCtrls, ActnList, ImgList, description, ExtCtrls, ComCtrls,
  XPMan, AppEvnts, Grids, RbDrawCore, RbRadioButton, RbCheckBox, RbSplitter,
  RbPanel, RbButton;

type
  TFormMain = class(TForm)
    ImageList: TImageList;
    AManager: TActionManager;
    AMainMenu: TActionMainMenuBar;
    ATool: TActionToolBar;
    Status: TStatusBar;
    Scroll: TScrollBox;
    Paint: TPaintBox;
    XPManifest: TXPManifest;
    UpDownSq: TUpDown;
    EditSq: TEdit;
    LBPix: TLabel;
    UpDownSh: TUpDown;
    EditSh: TEdit;
    LBShadow: TLabel;
    GraphClean: TAction;
    GraphUndo: TAction;
    About: TAction;
    Exit: TAction;
    ApplicationEvents: TApplicationEvents;
    Matrsm: TAction;
    MSmg1: TStringGrid;
    RbCheckBox1: TRbCheckBox;
    RbStyleManager1: TRbStyleManager;
    RbBn1: TRbButton;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure PaintMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure PaintMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure PaintPaint(Sender: TObject);
    procedure EditQChange(Sender: TObject);
    procedure EditQChange(Sender: TObject);
    procedure ExitExecute(Sender: TObject);
  {  procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);  }
    procedure ApplicationEventsIdle(Sender: TObject; var Done: Boolean);
    procedure AboutExecute(Sender: TObject);
    procedure MatrsmUpdate(Sender: TObject);
    procedure MatrsmExecute(Sender: TObject);
    procedure RbCheckBox1Click(Sender: TObject);
    procedure RbBn1Click(Sender: TObject);


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FormMain: TFormMain;
  n : integer = 5;
  PixList : TPixList;
  G : TGraph;
  Ves, GR: TA50;
  Pix:integer;
implementation

uses Unit2, about, d_v;

var
  CurX : integer = -1;
  CurY : integer = -1; 
  Undo : byte = 0; 
  UndoI : integer = -1;
  UndoJ : integer = -1;

{$R *.dfm}


procedure TFormMain.FormCreate(Sender: TObject);
begin
  MSmg1.Cells[0,1]:= '1';
  MSmg1.Cells[1,0]:= '1';
  PixList := TPixList.Create; 
end;

procedure TFormMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  PixList.Free;
end;

procedure TFormMain.PaintMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  
   if (CurX <> -1) and (CurY <> -1) then
    begin
       with Paint.Canvas do
        begin
          Paint.Repaint;   
          MoveTo(CurX,CurY);
 end;
end;
end;

procedure TFormMain.PaintMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  i,j : integer;
begin
  if Status.Panels[1].Text <> '' then
   Status.Panels[1].Text := '';
     begin
      CurX := X;
      CurY := Y;
      Canvas.MoveTo(X,Y);  
    end
   else
    GExpance(G,2);  //расширяем наш граф
        
       else
        if (i = -1) or (j = -1) then
     
           GExpance(Graph,1);
                
       if i = -1 then
        i := PixList.Add(TPixel.Create(CurX,CurY));
       if j = -1 then
        j := PixList.Add(TPixel.Create(X,Y)); 
     
      Paint.Repaint; 
    end
  else
   begin
     CurX := -1;
     CurY := -1;
     Paint.Repaint;
   end;
end;

procedure TFormMain.PaintPaint(Sender: TObject);
begin
  PaintG(G,PixList,Paint.Canvas,GR,Pix); 
end;                          
               
procedure TFormMain.EditSqChange(Sender: TObject);
begin
  m := strtoint(EditSq.Text); 
  Paint.Repaint;
end;

procedure TFormMain.EditQChange(Sender: TObject);
begin
  q := strtoint(EditSh.Text); 
  Paint.Repaint;
end;





procedure TFormMain.ExitExecute(Sender: TObject);
begin
  Close; 
end;



procedure TFormMain.ApplicationEventsIdle(Sender: TObject;
  var Done: Boolean);
begin
  //
end;

procedure TFormMain.AboutExecute(Sender: TObject);
begin
  FormAbout.Visible:=true;
end;

procedure TFormMain.MatrsmUpdate(Sender: TObject);
begin
   if UndoI > -1 then
    Matrsm.Enabled := true
   else
    Matrsm.Enabled := false;     
end;


procedure TFormMain.MatrsmExecute(Sender: TObject);
begin
//

end;


procedure TFormMain.RbCheckBox1Click(Sender: TObject);
begin
if MSmg1.Visible = false{если матрицы нет} then
begin
   MSmg1.Visible:= true;{она появляется}
   Paint.Align:= alRight;   {сдвигаем канву вправо}
  // Paint.Width:= 558;
   end
else
begin
  MSmg1.Visible:= false;
  Paint.Align:= alClient;
   Paint.Width:= 758;
end;
end;



procedure TFormMain.RbBn1Click(Sender: TObject);
begin
dv.Visible:=true;
//
end;

end.



Код

unit d_v;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  Tdv = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  dv: Tdv;

implementation
uses main;
{$R *.dfm}

procedure Tdv.Button1Click(Sender: TObject);
var v1,v2, w : integer;
begin
  v1:=StrToInt(Edit1.Text);
  v2:=StrToInt(Edit2.Text);
  w:=StrToInt(Edit3.Text);
  G[v1-1,v2-1]:=w;
FormMain.Paint.Repaint;
end;  

procedure Tdv.Button2Click(Sender: TObject);
begin
dv.Visible:=false;
end;

end.


Обычный Unit ничего не изменяю:
Код

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

end.
 


Все ок, как только стоит лишь прописать в main: uses Unit2

Это сообщение отредактировал(а) UMmi - 20.11.2006, 01:12
PM   Вверх
Snowy
Дата 20.11.2006, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



А что за классы TPixel и TPixList?
PM MAIL   Вверх
UMmi
Дата 20.11.2006, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 5.11.2006
Где: МО

Репутация: -1
Всего: 0



Вот:
Код

TPixel = class
    private
     FX, FY : integer;
    public
     property X : integer
      read FX
      write FX;
     property Y : integer
      read FY
      write FY;
     constructor Create (X,Y : integer);
   end;

   TPixList = class(TList)
    public
      function Exists (X,Y : integer) : integer; 
     
   end;

PM   Вверх
Snowy
Дата 20.11.2006, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Тогда почему ты создаёшь TPixel тоннами, но ни одного не уничтожаешь?
PM MAIL   Вверх
UMmi
Дата 20.11.2006, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 5.11.2006
Где: МО

Репутация: -1
Всего: 0



Snowy, что ты иммешь в виду? Что надо удалить? Если ты имеешь ввиду переменные класса TPixel то я не могу их уничтожать - они вершины создаваемой мной фигуры.

Это сообщение отредактировал(а) UMmi - 20.11.2006, 12:03
PM   Вверх
Snowy
Дата 20.11.2006, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Ну как это не можешь?
Должен smile
Или ты думаешь кому-то они нужны после закрытия программы?
PM MAIL   Вверх
Bose
Дата 20.11.2006, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



UMmi, открой исходник проекта: (в Дельфи в меню, Project->View Source). Гайди там блок похожий на
Код

  Application.CreateForm(TFormMain, FormMain);
  Application.CreateForm(Tdv, Dv);
 ...
  Application.Run;


и после Application.run, уничтожь созданные формы в порядке обратном создаваемому. Например:
Код

  Dv.free;
  FormMain.free;

PM MAIL WWW Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0678 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.