Простейшая программа, но есть ошибка!
Участников: 2
Страница 1 из 1
Простейшая программа, но есть ошибка!
Здравствуйте, у меня всё равно проблемы с new/delete
По логике всё правильно, но если написать не 80, а число, хоть чуть-чуть большее, то возникает ошибка!
(я пытаюсь создать в памяти массив через new/delete и заполнить его 0,1,2...98,99)
Работает только до 80 включительно, потом ошибка(отправить отчёт) и вылет программы.
Если не adres=New Integer[100], а adres=New Integer(100), то при >80 просто вылет без "отправить отчёт"
И если использовать allocate/deallocate тоже такая же фигня (
Непонятно! Если вместо интеджера написать 1(то есть побайтово), то всё отлично работает и непонятно, почему с Integer так не получается
А если вместо Integer поставить Double, то не до 80, а до 20 0_0
По логике всё правильно, но если написать не 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
Возраст : 30
Откуда : Москва
Re: Простейшая программа, но есть ошибка!
Ха-эм. А что значит вот эта строчка:
Я лично не представляю, в какое место это всё будет фигачится!
Будь проще, пиши
на sizeof(integer) уже всё автоматом домножается. Именно это называеться адресной арифметикой.
А можно ещё проще, это ведь массив всё-таки!
И кстати, я же ведь писал что new[ n ] резервирует память под n элементов.
В смысле ровно n, а не n+1.
если создаёшь
То и пользуй их от address[0] до address[99].
В address[100] или address[9999] конечно можешь тоже чего-нибудь положить, но если ты не знаешь, чья там память, то можешь поколечить свой процесс.
Именно это называеться "лезть в душу, с грязными сапогами."
А япошки говорят "харакири", тоесть в переводе на великий и могучий - "крайне неудачная и травмирующая попытка закончить своё мирское существование красиво."
- Код:
*(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] конечно можешь тоже чего-нибудь положить, но если ты не знаешь, чья там память, то можешь поколечить свой процесс.
Именно это называеться "лезть в душу, с грязными сапогами."
А япошки говорят "харакири", тоесть в переводе на великий и могучий - "крайне неудачная и травмирующая попытка закончить своё мирское существование красиво."
Re: Простейшая программа, но есть ошибка!
Это действительно харакири! Зарезаться можно.
Я никак не могу создать массив треугольников из текста. Запутанно всё, блин...
Я никак не могу создать массив треугольников из текста. Запутанно всё, блин...
Gena- Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 30
Откуда : Москва
Re: Простейшая программа, но есть ошибка!
треугольник из текста? В смысле? Это как?
Чтобы на экране был треугольник?..
Чтобы на экране был треугольник?..
Re: Простейшая программа, но есть ошибка!
Короче есть у меня игровой уровень, который я не хочу загружать по-старому. Я как бэ переделываю мой 3д движок так, чтобы с ним было легче обращаться, и можно было с лёгкостью развивать дальше (тот, который в проектах - это яркий пример "линейного" программирования, которое доставляет немало хлопот, когда программа становится большой) Так вот этот уровень сделан из блоков
4 'номер текстуры для полигона
0,0,0, 0,0 '1 вершина
1,0,0, 1,0 '2 вершина
1,0,1, 1,1 '3 вершина
=Комментарий к полигону
В общем я это дело компилирую, делаю там разные объекты и прочая фигня
Так вот мне надо:
Но не работает - я знаю, что напутал где-то в new/delete
Попробую завтра на свежую голову. =)
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
Возраст : 30
Откуда : Москва
Re: Простейшая программа, но есть ошибка!
Дошол до этих двух строчек, и решил, что дальше нет смысла ковыряться.
Особое внимание на Res.kolvo. Может быть тебе резервировать память тогда на Res.kolvo+1?
Читай мой предыдущий пост!
Или ты ещё не успел подправить?
А что за треугольники, я так и не понял! Я даже не смог найти объяснения...
- Код:
Res.ukaz= New myglTriangleT [Res.kolvo]
For i0=1 To Res.kolvo
Особое внимание на Res.kolvo. Может быть тебе резервировать память тогда на Res.kolvo+1?
Читай мой предыдущий пост!
Или ты ещё не успел подправить?
А что за треугольники, я так и не понял! Я даже не смог найти объяснения...
Re: Простейшая программа, но есть ошибка!
Всё отлично! Я всё сделал, спасибо большое Eric-S!
Gena- Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 30
Откуда : Москва
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|