Страница 1 из 4
(решено) SIGSEGV do arrBitmap[b].Free; - что не так?
Добавлено: 25.01.2017 10:13:27
vitaly_l
Код: Выделить всё
private
arrBitmap : array[0..33] of TBitmap;
procedure TFormMain.FormCreate(Sender: TObject);
var
b:byte;
begin
for b := 0 to 22 do arrBitmap[b] := TBitmap.Create;
end;
procedure TFormMain.FormClose(Sender: TObject; var CloseAction: TCloseAction);
var
b:byte;
begin
try
finally
for b := 0 to 22 do arrBitmap[b].Free; // <== вот на этом коде вылетает SIGSEGV - почему?
end;
end;
Если строчку: "for b := 0 to 22 do arrBitmap[b].Free; " - закомментировать, то всё работает нормально.

for b := 0 to 22 do arrBitmap[b].Free; // <== вот на этом коде вылетает SIGSEGV - почему? <== Что я делаю неправильно?
.
Re: SIGSEGV for b := 0 to 22 do arrBitmap[b].Free; - что не
Добавлено: 25.01.2017 10:21:55
zub
Уничтожаешь чтото 2 раза.
Будь у тебя прямой доступ к видеокарте такого бы точно небыло))
Re: SIGSEGV for b := 0 to 22 do arrBitmap[b].Free; - что не
Добавлено: 25.01.2017 10:29:24
pupsik
Вот что значит флуд на феерические отступления.
Когда удаляется первый элемент массива... что происходит с остальными элементами? Где будет находиться вторая запись перед удалением? Какое кол-во элементов?
Если мне карма не изменяет то надо вроде как так:
т.е. удаляем первую запись массива. Хотя... Куда мне до Бога с корабликом

Re: SIGSEGV for b := 0 to 22 do arrBitmap[b].Free; - что не
Добавлено: 25.01.2017 10:44:29
zub
pupsik
В порядке тролинга?
vitaly_l
Ты сам пробовал то что ты привел в первом посте? Чесно?
Проблема гдето между FormCreate FormClose в голом виде всё ок.
Вангую так: ты своим высокохудожественным кодом между FormCreate FormClose приводишь к тому что в массиве появляются ссылки на одно и тоже - потом пытаешся это одно и тоже освободить несколько раз.
Re: SIGSEGV for b := 0 to 22 do arrBitmap[b].Free; - что не
Добавлено: 25.01.2017 10:49:12
vitaly_l
pupsik писал(а):Где будет находиться вторая запись перед удалением?
Мысль понятна...
Re: SIGSEGV for b := 0 to 22 do arrBitmap[b].Free; - что не
Добавлено: 25.01.2017 10:49:30
pupsik
В порядке тролинга?
В смысле? Или вы считаете что ответ не верен? Учитывая что
статический массив из 33-х "строк" и vitaly_l пытается удалить 22 "строки", начиная с первой...
Если я не прав то... скажите: что произойдет при в=22. Т.е. на какой части будем находиться?
Re: (решено) SIGSEGV do arrBitmap[b].Free; - что не так?
Добавлено: 25.01.2017 10:50:54
vitaly_l
pupsik писал(а):Если я не прав то... скажите: что произойдет при в=22. Т.е. на какой части будем находиться?
pupsik писал(а):Где будет находиться вторая запись перед удалением?
Мысль понятна... исправил! Работает. Вам засчитан респект, от Бога с корабликом
И в подарок хорошее настроение,

Респектно-Бородатому пупсику

.
Re: SIGSEGV for b := 0 to 22 do arrBitmap[b].Free; - что не
Добавлено: 25.01.2017 10:50:59
zub
Люди вы совсем уже?
Я перестал понимать юмор?
Re: (решено) SIGSEGV do arrBitmap[b].Free; - что не так?
Добавлено: 25.01.2017 10:53:30
vitaly_l
zub писал(а):Люди вы совсем уже?
Я перестал понимать юмор?
Никакого юмора, после его подсказки - я поправил и ошибка исчезла. Для меня это тоже нонсенс... но это так!
Добавлено спустя 444 секунды:PS: Спасибо!
Re: (решено) SIGSEGV do arrBitmap[b].Free; - что не так?
Добавлено: 25.01.2017 10:54:23
zub
>>В смысле? Или вы считаете что ответ не верен?
Конечно неверен. Массив не статический а динамический. но это монопесуально. После arrBitmap[0].Free; в arrBitmap[0] будет ссылка на мусор, а повторная попытка удалить мусор пришлет вам лучей добра.
Добавлено спустя 100500 секунд:
>>Для меня это тоже нонсенс... но это так!
ЭТО НЕ ТАК
Re: (решено) SIGSEGV do arrBitmap[b].Free; - что не так?
Добавлено: 25.01.2017 10:57:43
vitaly_l
вот это естественно лажа ==> arrBitmap[0].Free; в arrBitmap[0]. Решение в другом месте:
Вот на эту строчку Пупсика внимательно смотрите и вникайте:
pupsik писал(а):Когда удаляется первый элемент массива... что происходит с остальными элементами? Где будет находиться вторая запись перед удалением?
Re: (решено) SIGSEGV do arrBitmap[b].Free; - что не так?
Добавлено: 25.01.2017 11:00:57
zub
Давай вникнем.
>>Когда удаляется первый элемент массива... что происходит с остальными элементами? Где будет находиться вторая запись перед удалением?
Но это тоже монописуально, и до и после вторая записб будет на томже месте, ниче не сдвигается если вы об этом
Re: (решено) SIGSEGV do arrBitmap[b].Free; - что не так?
Добавлено: 25.01.2017 11:17:33
vitaly_l
zub писал(а):Но это тоже монописуально, и до и после вторая записб будет на томже месте, ниче не сдвигается если вы об этом
Я сделал вот так (стал удалять в обратном порядке):
Код: Выделить всё
// for b := 0 to 22 do arrBitmap[b].Free; // <== так сбой
for b := 22 downto 0 do arrBitmap[b].Free; // <== а так работает
Вы программисты, Вы и решайте, что там не так? Но: Бородатый Пупсик - оказался прав!
.
Добавлено спустя 9 минут:Re: SIGSEGV do arrBitmap[b].Free; - что не так?
СТОП!
Респект - отзывается обратно, хорошее настроение остаётся.
Проблема не решена. Не помогло, всё равно выскакивает ошибка SIGSEGV.
Там ещё в середине программы, есть вот такой кусочек:
Код: Выделить всё
arrBitmap[b].Assign(Image1.Picture.Bitmap);
Canvas.StretchDraw(aRect,arrBitmap[b]);
Это может как-то влиять?
.
Re: SIGSEGV for b := 0 to 22 do arrBitmap[b].Free; - что не
Добавлено: 25.01.2017 11:20:56
zub
Фееричненько было. Художники... и
pupsik заодно
zub писал(а):Ты сам пробовал то что ты привел в первом посте? Чесно?
Проблема гдето между FormCreate FormClose в голом виде всё ок.
Вангую так: ты своим высокохудожественным кодом между FormCreate FormClose приводишь к тому что в массиве появляются ссылки на одно и тоже - потом пытаешся это одно и тоже освободить несколько раз.
Re: SIGSEGV do arrBitmap[b].Free; - что не так?
Добавлено: 25.01.2017 11:23:43
vitaly_l
zub писал(а):Вангую так: пытаешся одно и тоже освободить несколько раз.
Там ещё в середине программы, есть вот такой кусочек:
Код: Выделить всё
arrBitmap[b].Assign(Image1.Picture.Bitmap);
Canvas.StretchDraw(aRect,arrBitmap[b]);
Это может как-то влиять?
.