Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Ошибка переполнение стека


Автор: artdd 9.3.2011, 19:12
В АБЦ паскаль все работает, в турбо не хочет,помогите найти ошибку
Код



program Lab2;
uses LAB3U;

var
 InputString, srt_out: StrData;
 WordOut, WordIn: StrData;
 OutputString: StrData;

begin
  writeln('ВВедите строку');
  readln(InputString);
  writeln('ВВедите слово, после которого надо вставить другое слово');
  readln(WordOut);
  writeln('Введите слово, которое надо вставить');
  readln(WordIn);
   Inp( InputString, WordOut, WordIn);
  if ind<>11 then
  begin
  Writeln( ' результат');
  Writeln(o);
  end
  else
   writeln('слово не найдено');
readln;
 end.


Код




unit LAB3U;
Interface
type StrData = string;
     StrData1 = string;
 var inputstring,WordOut,WordIn,outputt,srt_out,a,o: string;
 i,len,ind:integer;
procedure Inp (Inputstring : StrData; WordOut:strData;  var WordIn: StrData1 );
implementation
procedure Inp (Inputstring : StrData; WordOut:strData;  var WordIn: StrData1 );
 var
    b:array[1..100]of string;
     l,i:integer;
 begin
 if pos(WordOut+' ', Inputstring)>0 then
 begin
  i := 1; l := 0;
  while (i <= length(Inputstring)) do
    begin
     while ((i <= length(Inputstring)) and (Inputstring[i] = ' ')) do
     inc (i);
     inc(l);
     b[l]:='';
     while ((i <= length(Inputstring)) and (Inputstring[i] <> ' ')) DO
       begin
            b[l]:=b[l]+Inputstring[i];
            inc (i);
       end;
    end;
 if (b[length(Inputstring)] = ' ')then dec(l);
 for i:=1 to l do
 if b[i] = WordOut then b[i]:=(WordOut) + ' ' + (WordIn);
 for i:=1 to l do
  begin
   a:=(b[i] + ' ');
   o:=o+a;
    end;
end
  else
  ind:=11;
end;
   end.


Автор: baldina 9.3.2011, 19:19
переменную ind надо проинициализировать. хотя причем тут стек...

Автор: artdd 9.3.2011, 19:49
Ошибка 202
Не помогает
Вводим 3 строчки, почле чего вылетает ошибка 202

Автор: artdd 10.3.2011, 17:26
есть идеи?

Автор: northener 10.3.2011, 18:50
Цитата(artdd @  9.3.2011,  19:49 Найти цитируемый пост)
Ошибка 202
Не помогает
Вводим 3 строчки, почле чего вылетает ошибка 202 

Непонятно почему сразу не вылетает. Стек-то в турбо паскале по умолчанию всего 16К.
А тут в стеке 
Цитата

  b:array[1..100]of string;
 
25600 байт.

Автор: baldina 10.3.2011, 19:38
тогда понятно и почему вылетает, и
Цитата(northener @  10.3.2011,  18:50 Найти цитируемый пост)
почему сразу не вылетает

потому что стек заканчивается в момент вызова функции, когда выделяется память под массив
а ведь знал когда-то, что стек в паскале маленький...

Автор: artdd 11.3.2011, 09:57
Большое спасибо, поменял на 20 элементов, теперь все работает

Автор: northener 12.3.2011, 02:27
Цитата(artdd @  11.3.2011,  09:57 Найти цитируемый пост)
Большое спасибо, поменял на 20 элементов, теперь все работает 

Логичнее было бы поменять выделение памяти для массива в стеке на выделение памяти для массива в куче. Стек он ведь не резиновый! Даже и в Дельфи!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)