Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > BlitzMax > 2D-программирование

Ответ
 
Опции темы
Старый 20.03.2011, 20:41   #1
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
BlitzMax + C - проблема с указателями

Есть вот такая функция на С:
BBFLOAT *test()
{
	BBFLOAT out[1]={1.0};
	return out;
}
Я ее подключаю:
Extern "C"
	Function test:float ptr()
End Extern
И потом тестирую:

Local tes:Float ptr=test()
RuntimeError(tes[0])
Вылетает какое то бредово-рандомное число. Как исправить???
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
LLI.T.A.L.K.E.R. (20.03.2011)
Старый 20.03.2011, 22:21   #2
wolfhound512
Знающий
 
Аватар для wolfhound512
 
Регистрация: 18.02.2008
Сообщений: 276
Написано 121 полезных сообщений
(для 299 пользователей)
Ответ: BlitzMax + C - проблема с указателями

У тебя "out" объявлена в функции, т.е. это локальная переменная, и после выхода из функции ее не существует. В БМ ты получаешь указатель на уже освобожденную память
__________________
GUI, GUIw512, AlbaLynx, Форум
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо wolfhound512 за это полезное сообщение:
LLI.T.A.L.K.E.R. (20.03.2011), Reizel (20.03.2011)
Старый 20.03.2011, 22:26   #3
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: BlitzMax + C - проблема с указателями

Ты гений! Попрогал, называется, на BMax'e, забыл про локальные переменные
__________________
(Offline)
 
Ответить с цитированием
Старый 20.03.2011, 23:30   #4
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Ответ: BlitzMax + C - проблема с указателями

Прошу написать код, при котором out не локальна (т.е. решение проблемы)
Это так, для ознакомления (на С особо не пишу)
(Offline)
 
Ответить с цитированием
Старый 21.03.2011, 00:27   #5
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: BlitzMax + C - проблема с указателями

Дык (мое решение)

float out[5];

float * func()
{
     out[0]=9;
     return out;
}
__________________
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 10:04.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com