ошибка в посторонней функции, при захвате памяти

Предыдущая тема Следующая тема Перейти вниз

ошибка в посторонней функции, при захвате памяти

Сообщение  Eric-S в Пн Дек 29, 2008 12:07 pm

Произошел у меня глюк с памятью.
Проявляеться он в том, что когда я захватываю ещё немного памяти. В моём случае всего 2*49 байт.
То накрывается моя другая функция.

Функция простая, по сути аналог sleep, просто чуть другое поведение и сообщение в нижней строчки. Ничего извращённого, короче классика.

Код:

dim ws as wstring ptr
pause ' отработала нормально
ws = allocate( l * len(wstring))
print "allocate: "; l
pause ' уже ошибка

Код ошибки 12. Происходит в функции pause()

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: ошибка в посторонней функции, при захвате памяти

Сообщение  Eric-S в Пн Дек 29, 2008 12:18 pm

Я только что выяснил, что ошибка происходит в функции space()
Представляете себе, такая бяка!
А прога-то дальше и не работает.
Мне очень хочеться понять, это после меня или всё же ошибка в runtime library?

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: ошибка в посторонней функции, при захвате памяти

Сообщение  Eric-S в Пн Дек 29, 2008 1:44 pm

Ага. Я выяснил, что дело не в функции space()
Тоже самое происходит с функцией string()
И даже когда я просто ещё запрашиваю память allocate() больше 80 байт, то глюк выскакивает.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: ошибка в посторонней функции, при захвате памяти

Сообщение  tux в Пн Дек 29, 2008 11:05 pm

я парился с такой фигней почти неделю, косяки вылазили случайно и в абсолютно безопасных местах, все ето началось после того, как я заменил string на zstring. Так вот смысл в чем... Когда мы в Си-шке работаем с zstring-ом, то мы выделяем памяти равное кол-ву строки+1 байт на закрывающий нулевой символ, который впрочем можно и не ставить, если мы сами обрабатываем строку без использования Си-шых функций, те когда знаем точный размер сроки и не вылазеем за ее пределы (где может находиться чужая область памяти). Си-шные же функции ориентируются на конец строки именно по нулю, если его нет, то хавают чужую память, пока не встретят случайный ноль, или пока прога не глюканет. В FB сделали немножко подругому (единственное, где я непонимаю логики этих действий), FB автоматически подставляет в конец ноль после присваивании строки (ну наверно чтобы избежать подобного Си-шному ужаса), пэтому всегда надо выделять на один байт больше, чем сама строка, НО!!! если мы выделим памяти ровно столько, сколько размер строки, то ноль подставляется в следующую ячейку памяти, которая принадлежит другим структурам программы, поэтому и возникают ошибки в совсем безобидных местах. Понял я это, когда почитал в манах про zstring, так что делайте выводы...
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: ошибка в посторонней функции, при захвате памяти

Сообщение  Eric-S в Вт Дек 30, 2008 1:07 am

Ага. Понял! Уже и сам пошел всё проверять.

Утилитка у меня тут одна.
Данные, причём почти все через указатели.
Строки только wstring, но ещё байтовые буфера.
От классических массивов отказался.
Мозги плавятся от такой жести.
И оторваться не могу, прямо как наркоман. С утра доночи.

Ох и намучался же я с этими указателями!
Да тут ещё все эти размеры. Их нужно приблизительно вычеслять.

Сейчас прошелся по коду. Подкорректировал всё что смог. Нужно будет ещё раз просмотреть, некоторые цыфорки эмперически подобраны.

Причём, ведь заработала, зараза! Потрепав мне нервы.

Так и не понял где была ошибка. Слишком много изменений сделал. И много пересчётов. Так сказать ближе к теме. Вероятно я действительно где-то выскакивал за границы.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: ошибка в посторонней функции, при захвате памяти

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения