forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=109)
-   -   BlitzMax + C - проблема с указателями (http://forum.boolean.name/showthread.php?t=14450)

Reizel 20.03.2011 20:41

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])

Вылетает какое то бредово-рандомное число. Как исправить???

wolfhound512 20.03.2011 22:21

Ответ: BlitzMax + C - проблема с указателями
 
У тебя "out" объявлена в функции, т.е. это локальная переменная, и после выхода из функции ее не существует. В БМ ты получаешь указатель на уже освобожденную память

Reizel 20.03.2011 22:26

Ответ: BlitzMax + C - проблема с указателями
 
Ты гений! Попрогал, называется, на BMax'e, забыл про локальные переменные :-D

LLI.T.A.L.K.E.R. 20.03.2011 23:30

Ответ: BlitzMax + C - проблема с указателями
 
Прошу написать код, при котором out не локальна (т.е. решение проблемы)
Это так, для ознакомления (на С особо не пишу)

Reizel 21.03.2011 00:27

Ответ: BlitzMax + C - проблема с указателями
 
Дык (мое решение)

float out[5];

Код:

float * func()
{
    out[0]=9;
    return out;
}



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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot