![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 04.12.2006
Сообщений: 4
|
![]()
Помогите пожалуйста!
Проблема такая: использую динамич. массивы и в процессе выполнения программа 1-й раз проходит , а второй раз выбрасывает- в переполнение стека. Как програмно очищать стек?или чтобы такой проблемы не повторялось. Заранее благодарен. |
![]() |
![]() |
![]() |
#2 |
Армия Рассейская
Форумчанин
Регистрация: 06.12.2006
Сообщений: 175
|
![]()
Исходничек предоставь, а то наугад тяжеловато
Сделаем ночь ярче!!! - Ракетные войска стратегического назначения
Центральный клуб туристов РВСН |
![]() |
![]() |
![]() |
#3 |
Регистрация: 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, но незнаю что куда девать. |
![]() |
![]() |
![]() |
#4 |
Александр
Администратор
Регистрация: 28.10.2006
Сообщений: 17,630
|
![]()
for i:=1 to length(x) do
Возможно не в этом ошибка, но привыкайте, что массивы начинаются с 0. значит запись должна быть такой: for i:=0 to length(x)-1 do |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 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 ); это должно помочь... ![]()
Незнание - рабство, знание - свобода ! ! !
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 02.04.2007
Сообщений: 37
|
![]()
мне нужно так сделать, чтобы написать Едит1. Едит2. курс "валути" Настроик от СомвоВох. и пачитать. на пример если Долар 1,65 100 Долар= 165 рубл. памагите пажалуста. // Спасиба зарание//
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
помогите. массив не взамодействует с функцией. какая-то ошибка стека. | 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 |