Простейшая программа, но есть ошибка!

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

Простейшая программа, но есть ошибка!

Сообщение  Gena в Пт Авг 14, 2009 8:01 pm

Здравствуйте, у меня всё равно проблемы с new/delete
По логике всё правильно, но если написать не 80, а число, хоть чуть-чуть большее, то возникает ошибка!
(я пытаюсь создать в памяти массив через new/delete и заполнить его 0,1,2...98,99)

Код:
ScreenRes 640,480,32
Dim As Integer Ptr Adres
Dim As Integer i0
adres=New Integer[100]
For i0=0 To 80
*(adres+i0*SizeOf(Integer))=i0   
Next
a2=adres+80*SizeOf(Integer)
Print *a2
Do
   Sleep 10
Loop Until MultiKey(fb.SC_ESCAPE)
Delete[] adres

Работает только до 80 включительно, потом ошибка(отправить отчёт) и вылет программы.

Если не adres=New Integer[100], а adres=New Integer(100), то при >80 просто вылет без "отправить отчёт"

И если использовать allocate/deallocate тоже такая же фигня (

Непонятно! Если вместо интеджера написать 1(то есть побайтово), то всё отлично работает и непонятно, почему с Integer так не получается

А если вместо Integer поставить Double, то не до 80, а до 20 0_0

Gena

Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 23
Откуда : Москва

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

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

Re: Простейшая программа, но есть ошибка!

Сообщение  Eric-S в Пт Авг 14, 2009 9:00 pm

Ха-эм. А что значит вот эта строчка:
Код:

*(adres+i0*SizeOf(Integer))=i0   

Я лично не представляю, в какое место это всё будет фигачится!
Будь проще, пиши
Код:

*(adres + i0) = i0   

на sizeof(integer) уже всё автоматом домножается. Именно это называеться адресной арифметикой.

А можно ещё проще, это ведь массив всё-таки!
Код:

adres[i0] = i0 

И кстати, я же ведь писал что new[ n ] резервирует память под n элементов.
В смысле ровно n, а не n+1.
если создаёшь
Код:

address = new integer[100]

То и пользуй их от address[0] до address[99].
В address[100] или address[9999] конечно можешь тоже чего-нибудь положить, но если ты не знаешь, чья там память, то можешь поколечить свой процесс.
Именно это называеться "лезть в душу, с грязными сапогами."

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

Eric-S

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

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

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

Re: Простейшая программа, но есть ошибка!

Сообщение  Gena в Пт Авг 14, 2009 10:13 pm

Это действительно харакири! Зарезаться можно.
Я никак не могу создать массив треугольников из текста. Запутанно всё, блин...

Gena

Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 23
Откуда : Москва

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

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

Re: Простейшая программа, но есть ошибка!

Сообщение  Eric-S в Пт Авг 14, 2009 10:42 pm

треугольник из текста? В смысле? Это как?
Чтобы на экране был треугольник?..

Eric-S

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

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

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

Re: Простейшая программа, но есть ошибка!

Сообщение  Gena в Пт Авг 14, 2009 11:15 pm

Короче есть у меня игровой уровень, который я не хочу загружать по-старому. Я как бэ переделываю мой 3д движок так, чтобы с ним было легче обращаться, и можно было с лёгкостью развивать дальше (тот, который в проектах - это яркий пример "линейного" программирования, которое доставляет немало хлопот, когда программа становится большой) Так вот этот уровень сделан из блоков
4 'номер текстуры для полигона
0,0,0, 0,0 '1 вершина
1,0,0, 1,0 '2 вершина
1,0,1, 1,1 '3 вершина
=Комментарий к полигону
В общем я это дело компилирую, делаю там разные объекты и прочая фигня
Так вот мне надо:
Код:

Type myglVertOnTriangleT
   x As Double
   y As Double
   z As Double
   U As Double
   V As Double   
End Type
Type myglTriangleT
   T(1 To 3) As myglVertOnTriangleT
   NomTex As Integer
End Type
Type myglLevel
   kolvo as integer  'количество треугольников
   ukaz as myglTriangleT ptr ' указатель на начало массива треугольников
End Type
dim Level as myglLevel
Level=myglLoadLevel("map01")
.....
delete level.ukaz
А читать из файла так

Код:
Function LoadLevel(nmoft As string) As myglLevel
Dim res As myglLevel
Dim trg As myglTriangleT
Dim mesto As Integer
Open ExePath+"\maps\"+nmoft+"\treugs.txt" For Input As #2
Do
   Input #2,trg.NomTex
   Input #2,trg.T(1).x,trg.T(1).y,trg.T(1).z,trg.T(1).U,trg.T(1).V
   Input #2,trg.T(2).x,trg.T(2).y,trg.T(2).z,trg.T(2).U,trg.T(2).V
   Input #2,trg.T(3).x,trg.T(3).y,trg.T(3).z,trg.T(3).U,trg.T(3).V
   Input #2,s0
   Res.kolvo+=1
Loop Until Eof(2)
Res.ukaz= New myglTriangleT [Res.kolvo]
Seek 2,1
For i0=1 To Res.kolvo
   Input #2,trg.NomTex
   Input #2,trg.T(1).x,trg.T(1).y,trg.T(1).z,trg.T(1).U,trg.T(1).V
   Input #2,trg.T(2).x,trg.T(2).y,trg.T(2).z,trg.T(2).U,trg.T(2).V
   Input #2,trg.T(3).x,trg.T(3).y,trg.T(3).z,trg.T(3).U,trg.T(3).V
   Input #2,s0

   *(Res.ukaz+i0)=trg
   'Res.ukaz=Res.ukaz+1
Next
Close #2
Return res
End Function

Но не работает - я знаю, что напутал где-то в new/delete
Попробую завтра на свежую голову. =)

Gena

Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 23
Откуда : Москва

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

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

Re: Простейшая программа, но есть ошибка!

Сообщение  Eric-S в Пт Авг 14, 2009 11:43 pm

Дошол до этих двух строчек, и решил, что дальше нет смысла ковыряться.
Код:

Res.ukaz= New myglTriangleT [Res.kolvo]
For i0=1 To Res.kolvo

Особое внимание на Res.kolvo. Может быть тебе резервировать память тогда на Res.kolvo+1?
Читай мой предыдущий пост!
Или ты ещё не успел подправить?

А что за треугольники, я так и не понял! Я даже не смог найти объяснения...

Eric-S

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

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

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

Re: Простейшая программа, но есть ошибка!

Сообщение  Gena в Сб Авг 15, 2009 10:57 am

Всё отлично! Я всё сделал, спасибо большое Eric-S!

Gena

Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 23
Откуда : Москва

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

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

Re: Простейшая программа, но есть ошибка!

Сообщение  Eric-S в Сб Авг 15, 2009 11:04 am

Поздравляю!

Eric-S

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

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

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

Re: Простейшая программа, но есть ошибка!

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


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


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

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


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