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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> access violation, проблема с ООП 
:(
    Опции темы
freek
Дата 20.2.2010, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть два юнита.. сответственно в одном описан класс в другом идет его вызов. привожу их коды
Код

unit Unit2;

interface
  type str=string[20];

Telement=record
fam:str;
kniga:str;
shifr:str;
god:integer;
kolvo:integer;
end;

mas=array of Telement;
ff=file of Telement;

Tavtor=class
 pv,nv:mas;
 m,n:integer;
 constructor create(a:integer);
 destructor Destroy;
 procedure poisk(familia: str);
 procedure insert(var pp:mas;var k:integer; zapis:Telement);
 procedure sort(var pp:mas);
 end;

 var f:ff;
 fname:string;

implementation

constructor tavtor.create(a:integer);
        begin
        setlength(pv,a);
        end;
Destructor Tavtor.destroy;
        begin
        setlength(pv,0);
        inherited destroy;
        end;



procedure tavtor.insert(var pp:mas; var k:integer;zapis:telement);
begin
k:=k+1;
setlength(pp,k);
pp[k]:=zapis;
end;

end.




Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    StringGrid1: TStringGrid;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    OpenDialog1: TOpenDialog;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
    procedure N7Click(Sender: TObject);
    procedure N8Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
   te:tavtor;
   f:ff;
   z:telement;
   fname:string;

implementation

 uses Unit3, Unit4;


{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
te:=tavtor.create(0);
fname:='date.lib';
assignfile(f,Fname);
end;


procedure TForm1.N8Click(Sender: TObject);
var dd:telement;
begin
form4.ShowModal;
if form4.ModalResult=mrok then
begin
dd.fam:=form4.Edit1.Text;
dd.kniga:=form4.Edit2.Text;
dd.shifr:=form4.Edit3.Text;
dd.god:=strtoint(form4.Edit4.Text);
dd.kolvo:=strtoint(form4.Edit5.Text);
end;
form4.Close;
te.insert(te.pv,te.m,dd);
seek(f,filesize(f));
write(f,dd);
closefile(f);
end;
end.


при вызове TForm1.N8Click происходят вот такого типа ошибки 

Project C:\Program Files\Borland\Delphi6\Proiects\bibliotek3\Projectl.exe faulted with message: 'access violation at 0x7c90e8e7: write of address 0x00030ffc". Process Stopped. Use Step or Run to continue. 

Дебагер показал что затык начинается со строки seek(f,filesize(f));

Что делаю не так??? я так понимаю что судя по типу ошибки идет обращение к несуществующему объекту в памяти... В общем что я где не так сделал?

P/S: Данное творение не мое, а набранный пример  из методички для изучения ООП. Но как видно что-то либо упущенно либо неправильно написано.


PM MAIL   Вверх
DarkProg
Дата 21.2.2010, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 4
Всего: 19



Я не уверен, но у тебя в двух модулях есть глобальная переменная f объявлення дважды , посмотри зачем тебе нужна эта переменная и убери её в одном из объявлений.


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
freek
Дата 21.2.2010, 02:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Я не уверен, но у тебя в двух модулях есть глобальная переменная f объявлення дважды , посмотри зачем тебе нужна эта переменная и убери её в одном из объявлений.

Не помагает (
PM MAIL   Вверх
CodeMonkey
Дата 21.2.2010, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

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



assignfile - вижу. Reset или Rewrite - не вижу.

P.S. ООП тут не при чём.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
freek
Дата 21.2.2010, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

assignfile - вижу. Reset или Rewrite - не вижу.

Добавил: reset(f);

Теперь
Код

procedure TForm1.N8Click(Sender: TObject);
var dd:telement;
begin
reset(f);
form4.ShowModal;
if form4.ModalResult=mrok then
begin
dd.fam:=form4.Edit1.Text;
dd.kniga:=form4.Edit2.Text;
dd.shifr:=form4.Edit3.Text;
dd.god:=strtoint(form4.Edit4.Text);
dd.kolvo:=strtoint(form4.Edit5.Text);
end;
form4.Close;
te.insert(te.pv,te.m,dd);
seek(f,filesize(f));
write(f,dd);
closefile(f);
end;
end.


Но ошибка всё таже.. хотя в файл уже и данные записались и дебагер проходит дальше...

Цитата

P.S. ООП тут не при чём.


Это я уже догадался но вот не легче стало  smile 
PM MAIL   Вверх
freek
Дата 26.2.2010, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



РЕбят больше никаких мыслей нет???

 smile  подскажите где взять хороший пример для изучения классов...???
PM MAIL   Вверх
DarkProg
Дата 26.2.2010, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 4
Всего: 19



Цитата(freek @  26.2.2010,  21:35 Найти цитируемый пост)
подскажите где взять хороший пример для изучения классов...??? 


В библиотеке(если ты студент то в Вузовской должна быть хотя бы одна книжка) возьми штук 5 книг, где тебе кажется что в этих книгах написано понятным языком и посвяти сему делу один полноценный рабочий день(у меня ушло ровно столько smile )

А если ты не студент ищи людей у которых есть книги по данной тематике или покупай сам(у меня книжек по программированию уже почти полка и хочу ещё smile )

Добавлено через 2 минуты и 52 секунды
Цитата(freek @  21.2.2010,  16:05 Найти цитируемый пост)
Но ошибка всё таже.. хотя в файл уже и данные записались и дебагер проходит дальше...


Ну воспользуйся трассировкой вручную, поставь бряки в начале каждой функции и иди по шагам, место где происходит косяк ты найдёшь, а оттуда уже смотри где косячит

Это сообщение отредактировал(а) DarkProg - 26.2.2010, 21:53


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
freek
Дата 26.2.2010, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



насчет книг не солгашусь..  Книги это больно общно... хотелось бы конкретики.. любую можно в инете  скачать.. вот только пока полную не видел.. везде в скользь об ООП говорят и все без особых примеров... 

Цитата

Дебагер показал что затык начинается со строки seek(f,filesize(f));


а вот почему это затык я не догоняю пока еще...


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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