Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2011, 21:36   #1
Александра_69
Пользователь
 
Регистрация: 28.10.2011
Сообщений: 22
По умолчанию access violation at address 00457119 in module 'project1.exe'. read of adress 000000E0

ошибка в выделенной строке! помогите справиться, пожалуйста!

Код:
Type
Ttovar=record
  nazv:string[100];
  kol:word;
  cen:integer;
  dat:Tdatetime;
  end;
var
tov:array of Ttovar; res:array[1..100] of Ttovar;
procedure sort(nzap:word; cen:integer;  Memo1:TMemo);
implementation
procedure sort;
var tv:string; i,k,c:integer; Tekdat:Tdatetime;
begin
k:=0; tekdat:=incMonth(date(),-1);
  for i:=1 to nzap do
  if (tov[i].cen>1000000) and (tov[i].dat<tekdat) then
  begin inc(k); res[k]:=tov[i]; end;
c:=k;
for i:=1 to c-1 do
for k:=1 to c do
if res[i].nazv>res[k].nazv then
 begin
    tv:=res[i].nazv;
    res[i].nazv:=res[k].nazv;
    res[k].nazv:=tv;
  end;
memo1.clear;
for i:=1 to c do
begin
with tov[i] do
Memo1.Lines.Add(IntToStr(i)+nazv+'   kol-vo:'+IntToStr(kol)+'   '
+ floatToStr(cen)+'rub'+'  '+DateToStr(Dat));
end;
end;

Последний раз редактировалось mihali4; 29.10.2011 в 18:28.
Александра_69 вне форума Ответить с цитированием
Старый 28.10.2011, 21:54   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
for i:=0 to nzap-1 do
if (tov[i].cen>1000000) and (tov[i].dat<tekdat) then
begin inc(k); res[k]:=tov[i]; end;
вместо Rez[i] тогда Rez[i+1]
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.10.2011, 21:55   #3
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Это весь код?
Код:
Type
Ttovar=record
nazv:string[100];
kol:word;
cen:integer;
dat:Tdatetime;
end;
var
tov:array of Ttovar; res:array[1..100] of Ttovar;
procedure sort(nzap:word; cen:integer; Memo1:TMemo);
implementation
Прежде чем приступить к ошибке...
странно, что раздел Implementation сделан, а раздела Interface нет.

Код:
for i:=0 to nzap-1 do
Этой строкой Аватар хотел сказать, что у вас происходит обращение к нулевому элементу массива, которого нет на самом деле.

А я ведь так и думал, что ошибка при проверке диапазона массива

Последний раз редактировалось Вадим Мошев; 28.10.2011 в 21:57.
Вадим Мошев вне форума Ответить с цитированием
Старый 29.10.2011, 15:41   #4
Александра_69
Пользователь
 
Регистрация: 28.10.2011
Сообщений: 22
По умолчанию

изменила на nzap-1 все равно не работает.
это только второй unit.
вот основная часть программы:


Код:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, StdCtrls, Unit2;
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    BitBtn1: TBitBtn;
    Button5: TButton;
    dlgOpen1: TOpenDialog;
    dlgSave1: TSaveDialog;
    edt4: TEdit;
    lbl2: TLabel;
    edt7: TEdit;
    lbl3: TLabel;
    btn1: TButton;
    btn2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
  private     { Private declarations }
  public      { Public declarations }
end;

Type
Ttovar=record
  nazv:string[100];
  kol:word;
  cen:integer;
  dat:Tdatetime;
end;
var
Fz:file of Ttovar;
Ft:TextFile;
tov:array[1..100] of Ttovar;
nzap:word; cen:integer;
FileNameZ,FileNameT:string;
var
  Form1: TForm1;
implementation
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin
Edit1.Clear; Edit2.Clear; Edit3.Clear; Edt4.Clear; Edt7.Clear;
Memo1.Clear; Button5.Hide; Btn1.Hide; Btn2.Hide;
nzap:=0;

end;

procedure TForm1.Button5Click(Sender: TObject);    //добавить запись
var dateformat:Tformatsettings;
begin
getLocaleFormatSettings(0,dateformat);
with dateformat do begin
  DateSeparator:='.';
  ShortDateFormat:='d.m.yy';
end;
nzap:=nzap+1;
with tov[nzap] do
begin
nazv:=Edit1.Text;
kol:=StrToInt(Edit2.Text);
cen:=StrToInt(Edit3.Text);
dat:=StrtoDate(Edt4.text,dateformat);
Memo1.Lines.Add(nazv+'   kol-vo:'+IntToStr(kol)+'   '+ floatToStr(cen)+
'rub'+'  '+dateToStr(Dat));
end;
Write(fz,tov[nzap]);
Edit1.Clear;   Edit2.Clear;   Edit3.Clear; Edt4.Clear;
end;

procedure TForm1.Button1Click(Sender: TObject);        //создать
begin
Memo1.Clear;
dlgOpen1.Title:='Создать новый файл';
if dlgOpen1.Execute then
begin
  FileNameZ:=dlgOpen1.FileName;
  AssignFile(Fz,FileNameZ);
  Rewrite(Fz);
end;
Button5.Show; Btn1.Show;
end;

procedure TForm1.Button2Click(Sender: TObject);         //открыть
begin
Memo1.Clear;
if dlgOpen1.Execute then
begin
  FileNameZ:=dlgOpen1.FileName;
  AssignFile(Fz,FileNameZ);
  Reset(Fz);
end;
nzap:=0;
while not eof(fz) do
begin
  nzap:=nzap+1;
  Read(fz,tov[nzap]);
  with tov[nzap] do
  Memo1.Lines.Add(nazv+'   kol-vo:'+IntToStr(kol)+'   '+ floatToStr(cen)+
  'rub'+'  '+DateToStr(Dat));
end;
Button5.Show; Btn1.Show;
end;



procedure TForm1.Button3Click(Sender: TObject);   //сортировать
begin
  sort(nzap,cen,Memo1);
end;

procedure TForm1.Button4Click(Sender: TObject);     //сохранить
var i:integer;
begin
if dlgSave1.Execute then
begin
  FileNameT:=dlgSave1.FileName;
  AssignFile(Ft,FileNameT);
  Rewrite(Ft);
end;
for i:=1 to nzap do
with tov[i] do
Writeln(Ft,i,'. ',nazv,floatToStr(cen)+'rub  '+dateToStr(Dat));
CloseFile(Ft);
end;

procedure TForm1.BitBtn1Click(Sender: TObject);            //закрыть
begin
CloseFile(fz);
end;

procedure TForm1.btn1Click(Sender: TObject);
var l:integer;
begin
Button5.Hide;
Btn2.Show;
l:=memo1.CaretPos.Y+1;
With tov[l] do begin
edit1.text:=nazv;
edit2.Text:=inttostr(kol);
edit3.Text:=inttostr(cen);
edt4.Text:=datetostr(Dat);
end;
end;

procedure TForm1.btn2Click(Sender: TObject);
Var l:integer;
begin
with tov[l] do
begin
 Memo1.Clear;
 for l:=1 to nzap do
 begin
 with tov[nzap] do
 Memo1.Lines.Add(nazv+'   kol-vo:'+IntToStr(kol)+'   '+ floatToStr(cen)+
'rub'+'  '+dateToStr(Dat));
end;
Btn2.Hide;
Button5.Show;
end;

end;
end.

Последний раз редактировалось Александра_69; 29.10.2011 в 17:23.
Александра_69 вне форума Ответить с цитированием
Старый 29.10.2011, 15:45   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Код оформиете тегом CODE(). Читабельнее будет.
Человек_Борща вне форума Ответить с цитированием
Старый 29.10.2011, 15:54   #6
Александра_69
Пользователь
 
Регистрация: 28.10.2011
Сообщений: 22
По умолчанию

простите, а как оформить?
Александра_69 вне форума Ответить с цитированием
Старый 29.10.2011, 16:23   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Кнопка есть. Потрудитесь найти и вставить туда код. Код будет более читабелен. В вашем случае, выкладывайте весь проект(если уж весь pas файл выкладываете).
Проще будет запустить и проверить где ошибка.
Человек_Борща вне форума Ответить с цитированием
Старый 29.10.2011, 16:46   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

У вас проблемы с массивом и индексами. Сразу бросился в глаза фрагмент из btn2Click если его чуть отформатировать:
Код:
with tov[l] do begin  // никакого значения для l не присвоено
  Memo1.Clear;
  for l:=1 to nzap do begin  //цикл по l, причем таже переменная что и выше
    with tov[nzap] do //а здесь индекс почему-то nzap
      Memo1.Lines.Add(nazv+' kol-vo:'+IntToStr(kol)+' '+ floatToStr(cen)+'rub'+' '+dateToStr(Dat));
  end;
  Btn2.Hide;
  Button5.Show;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 29.10.2011, 16:50   #9
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Ну и это тоже...

Проблема:
Конкретно в методе сортировки...
в Unit1 tov размерный массив array[1..100]
в Unit2 тотже tov безразмерный массив

в sort не происходит передача массива на обработку, и по этому берётся тот, что указан в unit2, а он не заполнен.

Последний раз редактировалось Человек_Борща; 29.10.2011 в 16:54.
Человек_Борща вне форума Ответить с цитированием
Старый 29.10.2011, 17:22   #10
Александра_69
Пользователь
 
Регистрация: 28.10.2011
Сообщений: 22
По умолчанию

в общем, всем спасибо! отдельно, "человеку Борща"!!
Александра_69 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка: "Access violation at address 0045E503 in module 'Project1.exe'. Read of address 00316777. Katexxxsa Общие вопросы Delphi 1 03.10.2011 23:16
Access violation at address 004733C4 in module 'loginin.exe'. Read of address 00000048' pavellyba Общие вопросы Delphi 2 18.08.2011 10:32
Ошибка "Access violation at address 004043A8 in module 'Project1.exe'. Read of address 00FF5A53." ms.Karishka Общие вопросы Delphi 6 14.04.2011 22:18
Access violation at address 00478D0E in module 'Project1.exe'. Write of address 00000000 fondreykus-1 Общие вопросы Delphi 5 27.01.2010 14:25
Ошибка: "Access violation at address 00454F01 in module 'Project1.exe'. Read of address 00000000. Fen1x Общие вопросы Delphi 8 13.10.2007 20:13