Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.02.2010, 23:25
AnimatoR AnimatoR вне форума
Прохожий
 
Регистрация: 16.02.2010
Сообщения: 8
Репутация: 10
Печаль eaccessviolation ошибка...

только начинаю пробывать работать в делфи...возникла проблема...

при запуске программы:

Код:
const d=20;
      n=50;
type
     stroka=string[d];
     ssilka=^stroka;
     text=array[1..n] of ssilka;
 var
     i,k,raz:integer;
     te:text;
     strok:ssilka;
     st:string;
begin
   k:=mmOutput.Lines.Capacity;
   New(strok);
   for i:=1 to n do   te[i]:=nil;
   for i:=1 to k do begin
                    st:=mmOutput.Lines.Strings[i-1];
                    te[i]^:= st;
                     end;
   for i:=1 to n do begin
                        if te[i]=nil then begin mmOutput.Lines.Add('пусто') ;
                                          end
                                      else
                                     mmOutput.Lines.Add(te[i]^);
                    end;

  Dispose(strok);


когда в мемо не пишешь ничего, т.е. все эл-ты массива Nil, то выводит "пусто" коректно.
Но стоит написать какой либо текст в мемо....так сразу вылетает с ошибкой...почему?что я сделал не так.Заранее спасибо.Если можно поподробнее.

Последний раз редактировалось AnimatoR, 16.02.2010 в 23:36.
Ответить с цитированием
  #2  
Старый 17.02.2010, 09:25
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Попробуй заменить
Цитата:
te[i]^:= st;
на
Код:
te[i]:= @st;
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #3  
Старый 17.02.2010, 09:38
AnimatoR AnimatoR вне форума
Прохожий
 
Регистрация: 16.02.2010
Сообщения: 8
Репутация: 10
Печаль Попробывал....

после замены te[i]^=st на te[i]=@st при прогонке программы......и вводе текста теперь её не выбивает, но выводятся непонятные иероглифы , заместо вводимого текста к примеру

Код:
БАЦ
5ШАXШШшц
пусто
пусто
пусто
пусто
пусто
пусто
пусто
пусто
пусто
...
..
.

хотя заместо "5ШАXШШшц" должно вывестись бац.....

Есть ещё варианты? =( а то завтра лабу уже сдать надо....
Ответить с цитированием
  #4  
Старый 17.02.2010, 09:46
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Варианты ищи в логике программы...в нее не вникал,в глаза бросилась только эта строка...
Т.к. чтобы загнать данные в указатель используют
te[i] := @st
чтобы вытащить
st := te[i]^
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #5  
Старый 17.02.2010, 09:56
AnimatoR AnimatoR вне форума
Прохожий
 
Регистрация: 16.02.2010
Сообщения: 8
Репутация: 10
По умолчанию

Спасибо...)
Но как я не пробывал...не получается...сама логика вроде верна....ибо выводит всё как надо , только вот не то....
Даже после исправлений по твоим советам:
Код:
const d=20;
      n=50;
type
     stroka=string[d];
     ssilka=^stroka;
     text=array[1..n] of ssilka;
 var
     i,k,raz:integer;
     te:text;
     strok:ssilka;
      st:string;
begin
   k:=mmOutput.Lines.Capacity;
   New(strok);
   for i:=1 to n do   te[i]:=nil;
   for i:=1 to k do begin
                    st:=mmOutput.Lines.Strings[i-1];
                    te[i]:= @st;
                     end;
   for i:=1 to n do begin
                        if te[i]=nil then begin mmOutput.Lines.Add('ïóñòî') ;
                                          end
                                      else begin
                                            st:=te[i]^;
                                     mmOutput.Lines.Add(st);
                    end;                    end;

  Dispose(strok);




end;
всё равно выводится ерунда...может там чтот не так у меня в присвоение строк...не догоняю..
Ответить с цитированием
  #6  
Старый 17.02.2010, 10:22
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Какая-то проблема с кодировками символов...ИМХО...
Я сделал так
Код:
type
     stroka=string;
Т.е. убрал размер строки...работает...
Вот весь юнит
Код:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    mmOutput: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
const d=20;
      n=50;
type
     stroka=string;
     ssilka=^stroka;
     text=array[1..n] of ssilka;
 var
     i,k,raz:integer;
     te:text;
     strok:ssilka;
     st:string;
begin
 k:=mmOutput.Lines.Capacity;
 New(strok);
 for i:=1 to n do
  te[i]:=nil;
 for i:=1 to k do
 begin
  st:=mmOutput.Lines.Strings[i-1];
  te[i]:= @st;
 end;
 for i:=1 to n do
 begin
  if te[i]=nil then
   mmOutput.Lines.Add('пусто')
  else
   mmOutput.Lines.Add(te[i]^);
 end;
Dispose(strok);
end;
end.
__________________
В начале был Бит, потом Байт и только потом появилось Слово...

Последний раз редактировалось NIch, 17.02.2010 в 10:26.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:07.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025