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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2006, 13:50   #1
inkvizitor
 
Регистрация: 04.12.2006
Сообщений: 4
По умолчанию Заполнение стека

Помогите пожалуйста!
Проблема такая:
использую динамич. массивы и в процессе выполнения программа 1-й раз проходит , а второй раз выбрасывает- в переполнение стека.
Как програмно очищать стек?или чтобы такой проблемы не повторялось.
Заранее благодарен.
inkvizitor вне форума Ответить с цитированием
Старый 16.12.2006, 15:30   #2
Nemon
Армия Рассейская
Форумчанин
 
Аватар для Nemon
 
Регистрация: 06.12.2006
Сообщений: 175
По умолчанию

Исходничек предоставь, а то наугад тяжеловато
Сделаем ночь ярче!!! - Ракетные войска стратегического назначения
Центральный клуб туристов РВСН
Nemon вне форума Ответить с цитированием
Старый 18.12.2006, 13:03   #3
inkvizitor
 
Регистрация: 04.12.2006
Сообщений: 4
По умолчанию заполнение стека

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
OpenDialog1: TOpenDialog;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Button3Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Memo1.Lines.LoadFromFile(OpenDialog 1.FileName); {загружаем данные в мемо}
end;
type
TMass=array of double;
{$P+ *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
var
x,y: TMass;
i,p1,p2,p3,p4,k,j: integer;
s: string;
begin
if Memo1.Lines.Count=0 then begin ShowMessage('нет данных!'); exit;end; {проверяем на наличие данных}
Form2.Memo1.Lines.Clear; {очищаем мемо на форме2,чтобы вывод в мемо начинался с первой строки}
Form1.Visible:=False; {обмен формами}
Form2.Visible:=True;
SetLength(x,Memo1.Lines.Count); {определение длины динамич. массива Х}
SetLength(y,Memo1.Lines.Count); {определение длины динамич. массива У}
for i:=1 to length(x) do
begin
k:=1;
p1:=0; p2:=0;p3:=0;p4:=0; {рассматриваем строку на содержание пробелов и чисел веществ.}
s:=Memo1.Lines.Strings[i-1];
for j:=1 to length(s) do
if (S[j]='.') then s[j]:=',';
while (s[k]=' ')do {ищем 1-й пробел}
begin
p1:=p1+1;
k:=k+1;
end;
p2:=p1;
while (s[k]<>' ')do {ищем 1-е число в строке}
begin
p2:=p2+1;
k:=k+1;
end;
p3:=p2;
while (s[k]=' ')do {ищем 2-й пробел}
begin
p3:=p3+1;
k:=k+1;
end;
p4:=p3;
while (s[k]<>' ')do {ищем 2-е чимло в строке}
begin
p4:=p4+1;
k:=k+1;
end;
{Form2.Edit1.Text:=Copy(s,p1+1,p2-p1);
Form2.Edit2.Text:=Copy(s,p3+1,p4-p3);}
x[i]:=StrToFloat(Copy(s,p1+1,p2-p1)); {заполнение массиваХ}
y[i]:=StrToFloat(Copy(s,p3+1,p4-p3)); {заполнение массива У}
Form2.Memo1.Lines.Add(floattostr(y[i]));{вывод масива (любого.не важно)на форму2 в мемо1.}

end;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
Memo1.Text:=' '; {кнопка сброс}
end;
end.
ну незнаю понятно ли.
подсказали x , free, но незнаю что куда девать.
Вложения
Тип файла: rar пример1.rar (253.3 Кб, 22 просмотров)
inkvizitor вне форума Ответить с цитированием
Старый 18.12.2006, 14:21   #4
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

for i:=1 to length(x) do

Возможно не в этом ошибка, но привыкайте, что массивы начинаются с 0. значит запись должна быть такой:

for i:=0 to length(x)-1 do
Alar вне форума Ответить с цитированием
Старый 20.12.2006, 11:17   #5
X=Vitamin=X
Пользователь
 
Аватар для X=Vitamin=X
 
Регистрация: 18.11.2006
Сообщений: 32
Восклицание

Дело вовсе не в цикле!!!
а вот в чем:

Form2.Memo1.Lines.Clear; ---- а мемо то уже очистили!!!
Form1.Visible:=False; {обмен формами} ---- Сдесь 1я форма стала пасивной
Form2.Visible:=True; ------ а вторая активной!!!
SetLength(x,Memo1.Lines.Count);
SetLength(y,Memo1.Lines.Count);

Когда ты делаешь "обмен формами" то дальше твой SetLength обращается к пустому мемо второй формы!!! ВОТ ПОЧЕМУ он проходит первый шаг а дальше вылетает...

Укажи в SetLength(x,Form1.Memo1.Lines.Count ); это должно помочь...
Незнание - рабство, знание - свобода ! ! !
X=Vitamin=X вне форума Ответить с цитированием
Старый 08.10.2007, 17:01   #6
beso
Пользователь
 
Регистрация: 02.04.2007
Сообщений: 37
По умолчанию

мне нужно так сделать, чтобы написать Едит1. Едит2. курс "валути" Настроик от СомвоВох. и пачитать. на пример если Долар 1,65 100 Долар= 165 рубл. памагите пажалуста. // Спасиба зарание//
Вложения
Тип файла: rar Валута-Пример.rar (309.4 Кб, 12 просмотров)
beso вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите. массив не взамодействует с функцией. какая-то ошибка стека. koir Паскаль, Turbo Pascal, PascalABC.NET 5 10.06.2008 08:32
Неправильный вывод данных из стека С++ Cyberex Общие вопросы C/C++ 3 07.05.2008 16:53
Ошибка переполнения стека из-за использования рекурсий Morrigan13 Помощь студентам 5 02.04.2008 08:04
Переполнение стека при передачи функциям массивов большой размерности graphoman Общие вопросы Delphi 2 07.01.2008 21:47