Не могу вернуть из функции, пользовательский тип.

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

Не могу вернуть из функции, пользовательский тип.

Сообщение  Eric-S в Сб Дек 27, 2008 8:16 pm

Вот такая проблема.
Не могу вернуть из функции, пользовательский тип.
Кто-нибудь может чего-нибудь конкретное посоветовать?

Ясно что проблема при освобождении памяти. Когда срабатывает мой деструктор. Но почему он срабатывает?

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

И ещё, заметил странность. конструктор и деструктор лишний раз отрабатывают. А значит, где-то создаётся ещё одна копия переменной. Спрашиваеться где?

Ниже мой тестовый код, который меня озадачил.

Код:


type mitype
declare constructor()
declare destructor()
buf as zstring ptr
end type

constructor mitype()
print "constructor"
this.buf = allocate( 80)
end constructor

destructor mitype()
print "destructor"
deallocate this.buf
end destructor

function test() as mitype
print "begin function"
dim t as mitype
*t.buf = "Hello, world! This is test buffer user define type."
function = t
function = t
print *t.buf
print "end function"
end function

sub main()
print "begin main"
dim t as mitype

print "call function"
t = test()
print "end call"

print *t.buf
print *(t.buf + 4)
print "end main"
end sub

main
sleep
end

Eric-S

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

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

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

Re: Не могу вернуть из функции, пользовательский тип.

Сообщение  vbman в Сб Апр 25, 2009 1:58 pm

Попробуйте ыернуть из функции указатель на этот тип...
avatar
vbman

Сообщения : 52
Дата регистрации : 2008-11-19
Возраст : 35
Откуда : Украина, Кировоград

Посмотреть профиль

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

Re: Не могу вернуть из функции, пользовательский тип.

Сообщение  Eric-S в Пт Май 01, 2009 6:23 pm

Указатель. Логично и я так же решил, а потом и сделал. Оно сработало. Но мне пришлось прогу значительно переработать.
И я до сих пор не пойму, в чём было дело.
Такое впечатление, что создаёться ещё копия переменной.

Eric-S

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

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

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

Re: Не могу вернуть из функции, пользовательский тип.

Сообщение  vbman в Сб Май 02, 2009 3:16 pm

Eric-S пишет:Указатель. Логично и я так же решил, а потом и сделал. Оно сработало. Но мне пришлось прогу значительно переработать.
И я до сих пор не пойму, в чём было дело.
Такое впечатление, что создаёться ещё копия переменной.

так оно и есть Evil or Very Mad Crying or Very sad Crying or Very sad Crying or Very sad
avatar
vbman

Сообщения : 52
Дата регистрации : 2008-11-19
Возраст : 35
Откуда : Украина, Кировоград

Посмотреть профиль

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

Re: Не могу вернуть из функции, пользовательский тип.

Сообщение  Eric-S в Сб Май 02, 2009 4:03 pm

Спотыкаясь о подобные непонятки я начал разочаровываться во freebasic.
Учиться программированию можно пока не надоест, а вершины так и не достигнешь.

Eric-S

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

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

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

Re: Не могу вернуть из функции, пользовательский тип.

Сообщение  vbman в Пн Май 11, 2009 3:27 pm

Eric-S пишет:Спотыкаясь о подобные непонятки я начал разочаровываться во freebasic.
Учиться программированию можно пока не надоест, а вершины так и не достигнешь.

Это не непонятки - так во всех языках (во всяком случае большинстве...) Sad
avatar
vbman

Сообщения : 52
Дата регистрации : 2008-11-19
Возраст : 35
Откуда : Украина, Кировоград

Посмотреть профиль

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

Re: Не могу вернуть из функции, пользовательский тип.

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


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


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

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

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

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