Форум: "Начинающим";
Текущий архив: 2010.01.17;
Скачать: [xml.tar.bz2];
ВнизРекурсивный обход дерева Найти похожие ветки
← →
Wito (2009-11-21 18:51) [0]Прошу помочь с алгоритмом построения, обхода и вывода дерева на экран.
Вот код, работает он неправильно ("насилие над доступом").TPGameState = ^TGamestate;
TGameState = record
links:array[0..5] of TPGameState;
name:string[200];
end;
...
var
root: TPGameState;
...
//Создание дерева
procedure newvetv(parrent:TPGamestate;hod:byte);
var i:byte;
begin
if length(parrent^.name)>100 then exit;
new(parrent.links[hod]);
parrent^.links[hod]^.name:="sub"+parrent^.name;
for I := 0 to 5 do newvetka(parrent^.links[hod],i);
end;
//Вывод дерева в TTreeView
function showalltree(rt:TPGameState; tree:TTreeNode):boolean;
var i:byte;
begin
if rt=nil then exit;
for i := 0 to 5 do if rt^.links[i]<>nil then
showalltree(rt^.links[i],form1.TV1.Items.AddChild(tree,rt^.name));
end;
...
newvetka(root,0);
showalltree(root,nil);
← →
Игорь Шевченко © (2009-11-21 19:01) [1]
> Вот код, работает он неправильно ("насилие над доступом").
исправь, все в твоих руках
← →
Не занят (2009-11-22 00:39) [2]Violation это нарушение а не насилие
← →
Германн © (2009-11-22 01:06) [3]
> Прошу помочь с алгоритмом
> Вот код, работает он неправильно
То бишь "дайте правильный код", а алгоритм не очень-то и нужен.
← →
имя (2009-11-22 01:43) [4]Удалено модератором
← →
antoxa (2009-11-22 04:18) [5]Удалено модератором
← →
Григорьев Антон © (2009-11-22 10:55) [6]Так как links содержит неуправляемые указатели, память, выделенная под этот массив в вашей записи, при выполнении New никак не инициализируется, там будут случайные значения. Дальше, если выполнится условие length(parrent^.name)>100, вы эти значения оставляете без изменения, поэтому гарантии, что там будет nil, нет никакой. В итоге проверка if rt=nil даёт отрицательный результат, и вы пытаетесь обратиться к несуществующему узлу по "мусорному" указателю. С большой вероятностью такой указатель указывает на ту часть адресного пространства, в которую ничего не отображено - вот вам и Access Violation.
← →
Wito (2009-11-22 11:55) [7]2Григорьев Антон спасиба, про parrent^.links[i]:=nil; не подумал
2Остальные: лечите уже свою параною, везде вам кажется что медвежую работу от вас требуют. Я привел код и попросил "помочь" а не выслать готовые иссходники (алгоритм показал в виде кода, расстреляйте меня теперь)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.01.17;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c