- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
var A:array of record
Foo: integer;
end;
function NewNode: integer;
begin
SetLength(A, Length(A)+1);
Result := High(A);
// возвращаем не указатель на последний элемент,
// а номер последнего элемента, потому что массив динамический и указатели нестабильны
end;
procedure DoSmth(var i: integer);
var
n1,n2: integer;
begin
n1 := NewNode;
n2 := NewNode;
// дальше что-то проделывааем над A[n1] и A[n2]
i := A[n1].Foo + A[n2].Foo;
end;
var
NewIndex: integer;
begin
NewIndex := NewNode;
DoSmth(A[NewIndex].Foo);
end.
Угадайте, почему это не будет работать и приведёт к порче памяти.
Xom94ok 15.02.2012 17:02 # +2
TarasB 15.02.2012 18:47 # 0
Проблема в том, что у меня может быть три var-параметра.
В итоге, чтобы это побороть, я вместо процедуры сделал функцию, возвращающую структуру из 3 членов. В языке с хреновой поддержкой кортежей это вылилось в целый убитый день.
Хорошо ещё, что дельфа вычисляет адрес места, куда возвращать значение, уже после выполнения функции.
Dummy00001 15.02.2012 19:32 # 0
ну да ты уже описал, но мне было почти очевидно: у меня много опыта работы с итераторами std::vector'а :)
с другой стороны. меня как-то напрягает тот SetLength(). я как-то никогда не задумывался как именно он работает. но если он сделан глупо как и все остальное в пасцале, то с легкостью может привести к квадратичной сложности функции NewNode().
TarasB 15.02.2012 20:00 # 0
Ты разговариваешь, как ламер.
Потому что только ламеры судят о Паскале по крестоблядским стереотипам.
А не-ламер знает, что в Паскале дофига умных вещей, например, строки, знающие длину, или массив, как часть языка, а не тупо указатель, или передача параметров в регистре, или менеджер памяти, благодаря которому вектор можно спокойно растить по одному, или оптимизатор, делающий ассемблеризацию почти бесполезной.
Dummy00001 15.02.2012 20:15 # 0
Если бы ты просто сказал что я ламер, это было бы ОК: мой 7+ лет опыт професиональной работы с Турбо/Борланд Паскалем/Дельфой на самом деле уже скоро будет как 10 лет позади.
Но следующим за этим списком ты показывашь что ты сам ламер который не только С++ не знает толком, а просто лох невпечатывающий что System.pas не богами писан и он физически не может работать лучше/быстрее чем современные алгоритмы. Да и даже те же современные алгоритмы дай в руке обезьяне...
TarasB 15.02.2012 20:19 # +2
И нехуй тут мне ставить минусики, а оппоненту плюсики, раз вы тупые кретобляди, нихуя не знающие, кроме "пасцаль сакс", то идите-ка нахуй, и сюда со своими крестоблядскими оценками блядь не лезьте.
Потому что меня заебало доказывать крестоблядям, что паскальный case компилируется в двоичное дерево или сразу переход по значение, потому что они уверены в том, что case компилируется в цепочку if, ведь им кулкацкер вася в 9 классе так сказал.
Познания крестоблядей о паскале и до сих пор находятся на уровне 9го класса, что мы и видим в данной беседе.
Lure Of Chaos 15.02.2012 21:57 # +6
Тарас в погоне за Урсусом?
TarasB 16.02.2012 09:23 # 0
Говногость 15.02.2012 22:36 # 0
TarasB 16.02.2012 09:21 # 0
И в Аде вектора такие же и сделать такой же прикол там никто не мешает.
ctm 16.02.2012 07:04 # 0
ну или там record возвращать
TarasB 16.02.2012 09:19 # 0
Но в конечном итоге я был вынужден так и сделать:
[quote]
Да.
Проблема в том, что у меня может быть три var-параметра.
В итоге, чтобы это побороть, я вместо процедуры сделал функцию, возвращающую структуру из 3 членов. В языке с хреновой поддержкой кортежей это вылилось в целый убитый день.
Хорошо ещё, что дельфа вычисляет адрес места, куда возвращать значение, уже после выполнения функции.
[/quote]
http://govnokod.ru/9430#comment130379
gegMOPO4 16.02.2012 18:22 # 0
Почему бы не написать
?
Параметры добавить по потребности. И никаких структур.
TarasB 16.02.2012 18:51 # 0
То есть придётся писать
В общем, радости мало.
Пока что у меня как-то так:
gegMOPO4 16.02.2012 19:05 # 0
Чем хуже? Писанины меньше. Нормальный сишный код (раньше в Си нельзя было из функций возвращать структуры).
TarasB 16.02.2012 19:36 # 0
gegMOPO4 16.02.2012 16:56 # 0
bugmenot 16.02.2012 17:03 # +4
Xom94ok 16.02.2012 22:03 # +1
TarasChlenodevka 18.06.2012 11:24 # −3