IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Error 202: Stack overflow, непонятно откуда =/
Turboworld
сообщение 19.08.2007 12:33
Сообщение #1


Оператор реальности
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской

Репутация: -  0  +


В общем задачку сам себе ставил - просто сгерерировать массив, состоящий из записей, у которых первое поле это слово (просто строка из цифр пока генерируется), а второе - ссылка на родителя. Т.е. иерархическое, так сказать, деревце. И его нужно представить в виде:

Root
..Folder1
....Folder1_child1
....Folder1_child2
..Folder2

Т.е. в древовидной форме (просто с отступами).

Сделал вроде как рекурсию (самовызов процедуры), однако при первом же заходе в нее на слове begin начала процедуры выскакивает Stack overflow. что-то не пойму в чём дело =/



program tree;
uses crt;
const nmax=100;
type leaf=record
name:string[255]; {nazvanie folder'a}
parent:integer; {nomer elementa v massive - roditelya}
end;
massive = array[1..nmax] of leaf;
var i,j,n:integer;
m:massive;
stemp:string;

procedure showtree(m:massive;nomer,otstup:integer);
var i,j:integer;
space:string;
begin
for i:=1 to n do begin
if m[i].parent=nomer then begin
space:='';
for j:=1 to otstup do begin
space:=space+'.';
end;
writeln(space,m[i].name);
showtree(m,i,otstup+1);
end;
end;
end;
{====================================================}


begin

randomize;
clrscr;
n:=0;
{add first element}
m[1].name:='Sample';
m[2].parent:=0;
n:=n+1;
{add some other elements - 10 items}
for i:=1 to 10 do begin
j:=random(1000);
str(j,stemp);
m[n+1].name:=stemp;
m[n+1].parent:=random(n+1); {0..n}
n:=n+1;
end;
{print the massive m}
for i:=1 to n do begin
writeln(i:2,'=',m[i].name:5,' : ',m[i].parent:2);
end;

{show tree}
writeln('===========This is tree==========');
showtree(m,0,0);
writeln('........PRESS ENTER to EXIT.......');
readln;
end.




 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 19.08.2007 12:37
Сообщение #2


Гость






Цитата
const 
nmax=100;
type
leaf=record { <--- Размер каждого элемента = 255 + 2 = 257 байт }
name:string[255]; {nazvanie folder'a}
parent:integer; {nomer elementa v massive - roditelya}
end;
massive = array[1..nmax] of leaf; { <--- 100 элементов }

Умножаем 100 на 257, получаем сколько? А теперь заходим в меню Options -> Memory Sizes и смотрим, какой размер стека...

Добавлено через 1 мин.
Я к тому, что вот тут:
Цитата
procedure showtree(m:massive;nomer,otstup:integer);
массив передается по значению - значит, ВЕСЬ загоняется в стек...

Сообщение отредактировано: volvo - 19.08.2007 12:39
 К началу страницы 
+ Ответить 
Turboworld
сообщение 19.08.2007 12:41
Сообщение #3


Оператор реальности
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 19.08.2007 13:37) *

Умножаем 100 на 257, получаем сколько? А теперь заходим в меню Options -> Memory Sizes и смотрим, какой размер стека...

Добавлено через 1 мин.
Я к тому, что вот тут:
массив передается по значению - значит, ВЕСЬ загоняется в стек...

пасиб за оперативный ответ, но я сам уже догадался только что smile.gif) поставил перед параметром в процедуре VAR и всё стало пучком smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 17:53
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"