Re[9]: Глюк с (unsigned short* a = new unsigned short[2];)
От: sercher Украина  
Дата: 12.11.03 13:17
Оценка:
Здравствуйте, Amon-RA, Вы писали:

AR>Здравствуйте, Lorenzo_LAMAS, Вы писали:


L_L>>[ccode]

AR>>>/*******************************************/
AR>>> unsigned short* trInd = new unsigned short[2];
AR>>> trInd[0] = (unsigned short)uCount;
AR>>> trInd[1] = (unsigned short)vCount;
AR>>>/********************************************/
L_L>>//здесь то не 0?
AR>>> CShape* shp;
AR>>> shp = new CShape(
AR>>> vertCount,vertCoo,vertNorm,vertMap,0,trInd,true,true
AR>>> );
AR>>> msh = new CMesh(shp);
AR>>> getWorld().addObject(msh);;
L_L>>//а здесь ?
L_L>>[/code]

AR>Так я и говорю, что ноль сразу после new unsigned short[2];


У меня всё ОК. new работает, как же иначе? Памяти у тебя не хватает, что-ли?
Re[10]: Глюк с (unsigned short* a = new unsigned short[2];)
От: Amon-RA  
Дата: 12.11.03 13:17
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>Ну, значит, ты как то умудрился всю память исчерпать? Кстати, new Должен исключение бросить


Интересно, я если эту функцию не вызываю и иду дальше, то он грузит двухметровый 3DS файл и тесктуры — на это место хватает. А на два беззнаковых коротких ну расшибись места нет
Re[9]: Глюк с (unsigned short* a = new unsigned short[2];)
От: sercher Украина  
Дата: 12.11.03 13:20
Оценка:
Здравствуйте, Amon-RA, Вы писали:

AR>Здравствуйте, sercher, Вы писали:



S>> Имеется ввиду код, где выделяется память и те места где ты сравниваешь её. А так понятно, что всё ОК, разве что ты в конструктор CShape() по-ссылке передаёшь и там обнуляешь.


AR>ЛЮДИИИИИИ Я не дохожу до CShape. Я вылетаю на trInd[0]=.....


А если не unsigned short, а, например, short или int? или char[4] ?
Ты оператор new часом не переопределял?
Re[11]: Глюк с (unsigned short* a = new unsigned short[2];)
От: Lorenzo_LAMAS  
Дата: 12.11.03 13:21
Оценка:
AR>Интересно, я если эту функцию не вызываю и иду дальше, то он грузит двухметровый 3DS файл и тесктуры — на это место хватает. А на два беззнаковых коротких ну расшибись места нет

Ну попробуй поставить std::set_new_handler — и свою функцию, которая тебе сообщит прав я или нет туда засунь.
Of course, the code must be complete enough to compile and link.
Re[10]: Глюк с (unsigned short* a = new unsigned short[2];)
От: Amon-RA  
Дата: 12.11.03 13:23
Оценка:
Здравствуйте, sercher, Вы писали:

S>Здравствуйте, Amon-RA, Вы писали:


AR>>Здравствуйте, sercher, Вы писали:



S>>> Имеется ввиду код, где выделяется память и те места где ты сравниваешь её. А так понятно, что всё ОК, разве что ты в конструктор CShape() по-ссылке передаёшь и там обнуляешь.


AR>>ЛЮДИИИИИИ Я не дохожу до CShape. Я вылетаю на trInd[0]=.....


S> А если не unsigned short, а, например, short или int? или char[4] ?

S> Ты оператор new часом не переопределял?

Да нет, не переопределял. Я тогда не пойму, фиг ли эта же строчка в другом месте работает
Re[7]: Глюк с (unsigned short* a = new unsigned short[2];)
От: BOPOH_N Россия  
Дата: 12.11.03 13:25
Оценка:
Здравствуйте, Amon-RA, Вы писали:

AR>Здравствуйте, BOPOH_N, Вы писали:




AR>
AR>          int vertCount = 4;
AR>          float* vertCoo = new float[vertCount*3];
AR>          float* vertNorm = new float[vertCount*3];
AR>          MyVector center(0,0,5);
AR>          for(int ct = 0, index = 0; ct < vertCount; ct++, index += 3) 
AR>          {
AR>            MyVector pos(ct,ct,index);
AR>            pos.subtract(center);
AR>            vertCoo[index  ] = (float)pos.getX();
AR>            vertNorm[index  ] = 0.0;
AR>            vertCoo[index+1] = (float)pos.getY();
AR>            vertNorm[index+1] = 0.0;
AR>            vertCoo[index+2] = (float)pos.getZ();
AR>            vertNorm[index+2] = 1.0;
AR>          }
AR>          float* vertMap = new float[vertCount*2];
AR>          int  uCount = 4;
AR>          int  vCount = 4;
AR>          float vStep = 1.0f/(vCount-1);
AR>          float uStep = 1.0f/(uCount-1);
AR>          int v;
AR>          for( v = 0, index = 0; v < vCount; v++) 
AR>          {
AR>            float vConst = v*vStep;
AR>            for(int u = 0; u < uCount; u++, index += 2) 
AR>            {
AR>              vertMap[index  ] = u*uStep;
AR>              vertMap[index+1] = vConst;
AR>            }
AR>          }
AR>/*******************************************/
             unsigned short* trInd1 = new unsigned short[2];
AR>          unsigned short* trInd = new unsigned short[2];
             unsigned short* trInd2 = new unsigned short[2]; //Чисто для эксперимента добавь
AR>          trInd[0] = (unsigned short)uCount;
AR>          trInd[1] = (unsigned short)vCount;
AR>/********************************************/
AR>          CShape*  shp;
AR>          shp = new CShape(
AR>            vertCount,vertCoo,vertNorm,vertMap,0,trInd,true,true
AR>          );
AR>          msh = new CMesh(shp);
AR>          getWorld().addObject(msh);;
AR>
В искустве летать есть один маленький секрет. Секрет этот в том,чтобы бросить себя изо всех сил на землю — и не попасть. Выберете погожий денек и попробуйте сами.
Re[8]: Глюк с (unsigned short* a = new unsigned short[2];)
От: Amon-RA  
Дата: 12.11.03 13:28
Оценка:
Здравствуйте, BOPOH_N, Вы писали:

AR>>/*******************************************/

BOP> unsigned short* trInd1 = new unsigned short[2];
AR>> unsigned short* trInd = new unsigned short[2];
BOP> unsigned short* trInd2 = new unsigned short[2]; //Чисто для эксперимента добавь
AR>> trInd[0] = (unsigned short)uCount;
AR>> trInd[1] = (unsigned short)vCount;
AR>>/********************************************/

Зашибись, все нули
Re: Глюк с (unsigned short* a = new unsigned short[2];)
От: Константин http://flint-inc.ru/
Дата: 12.11.03 13:28
Оценка:
Здравствуйте, Amon-RA, Вы писали:

AR>Почему после этой строчки (сабж) а == 0х00000000; ерунда какая-то


Очень любопытный баг... Кстати, в какой среде это всё происходит? У меня как-то пару раз бывали тоже совершенно необъяснимые баги. Сейчас уже не помню точный пример, но примерно так же — в проекте моём не работает, хоть ты тресни, а в новом проекте или даже в другой функции всё ок. И я придумал такой способ: создаю новый чистый проект, и постепенно, файл за файлом переношу свой проект в новый, периодически перекомпиляя и проверяя, работает ли. В конце концов получаю практически идентичные проекты, один работает, другой — нет
Так я и не разобрался тогда, в чём было дело. Может, глюк среды?

Ещё такой вариант сейчас в голову пришёл: напиши сразу после твоей строчки с new другую строчку типа int* abvgd = new int[2]; и проверь, работает ли она. Если да — то потихоньку переделывай её в свою, после каждого изменения проверяя работоспособность. Если нет — то же самое сделай ПЕРЕД своей строчкой... Да, и ещё — переменной abvgd не должно быть НИГДЕ в проекте! (на всякий пожарный).
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[2]: Глюк с (unsigned short* a = new unsigned short[2];)
От: Константин http://flint-inc.ru/
Дата: 12.11.03 13:29
Оценка:
Блин, опередили меня
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[9]: Глюк с (unsigned short* a = new unsigned short[2];)
От: BOPOH_N Россия  
Дата: 12.11.03 13:29
Оценка: :)
Здравствуйте, Amon-RA, Вы писали:

AR>Здравствуйте, BOPOH_N, Вы писали:


AR>>>/*******************************************/

BOP>> unsigned short* trInd1 = new unsigned short[2];
AR>>> unsigned short* trInd = new unsigned short[2];
BOP>> unsigned short* trInd2 = new unsigned short[2]; //Чисто для эксперимента добавь
AR>>> trInd[0] = (unsigned short)uCount;
AR>>> trInd[1] = (unsigned short)vCount;
AR>>>/********************************************/

AR>Зашибись, все нули


Мля — против этого тока одно средство — пойти попить пивка, а уторм все само пройдет
В искустве летать есть один маленький секрет. Секрет этот в том,чтобы бросить себя изо всех сил на землю — и не попасть. Выберете погожий денек и попробуйте сами.
Re[2]: Глюк с (unsigned short* a = new unsigned short[2];)
От: Amon-RA  
Дата: 12.11.03 13:30
Оценка:
Здравствуйте, Константин, Вы писали:

К>Здравствуйте, Amon-RA, Вы писали:


AR>>Почему после этой строчки (сабж) а == 0х00000000; ерунда какая-то


К>Очень любопытный баг... Кстати, в какой среде это всё происходит? У меня как-то пару раз бывали тоже совершенно необъяснимые баги. Сейчас уже не помню точный пример, но примерно так же — в проекте моём не работает, хоть ты тресни, а в новом проекте или даже в другой функции всё ок. И я придумал такой способ: создаю новый чистый проект, и постепенно, файл за файлом переношу свой проект в новый, периодически перекомпиляя и проверяя, работает ли. В конце концов получаю практически идентичные проекты, один работает, другой — нет

К>Так я и не разобрался тогда, в чём было дело. Может, глюк среды?

К>Ещё такой вариант сейчас в голову пришёл: напиши сразу после твоей строчки с new другую строчку типа int* abvgd = new int[2]; и проверь, работает ли она. Если да — то потихоньку переделывай её в свою, после каждого изменения проверяя работоспособность. Если нет — то же самое сделай ПЕРЕД своей строчкой... Да, и ещё — переменной abvgd не должно быть НИГДЕ в проекте! (на всякий пожарный).


Спасибо. Я в шестой студии
Re[3]: Глюк с (unsigned short* a = new unsigned short[2];)
От: Константин http://flint-inc.ru/
Дата: 12.11.03 13:31
Оценка:
А если всё-таки попробовать завести массив именно int'ов?
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[7]: Переполнение массивов
От: Vi2 Удмуртия http://www.adem.ru
Дата: 12.11.03 13:31
Оценка: 16 (2)
Здравствуйте, Amon-RA, Вы писали:

AR>          int vertCount = 4;
AR>...
AR>          float* vertMap = new float[ vertCount*2 ];
AR>          int  uCount = 4;
AR>          int  vCount = 4;
AR>...
AR>          for( v = 0, index = 0; v < vCount; v++) 
AR>          {
AR>            float vConst = v*vStep;
AR>            for(int u = 0; u < uCount; u++, index += 2) 
AR>            {
AR>              vertMap[index  ] = u*uStep;
AR>              vertMap[index+1] = vConst;
AR>            }
AR>          }
AR>/*******************************************/
AR>          unsigned short* trInd = new unsigned short[2];
AR>          trInd[0] = (unsigned short)uCount;
AR>          trInd[1] = (unsigned short)vCount;
AR>/********************************************/

Судя по всему, переполнение массивов происходит. А там уж как память будет затерта.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re: Глюк с (unsigned short* a = new unsigned short[2];)
От: Amon-RA  
Дата: 12.11.03 13:32
Оценка:
Здравствуйте, Amon-RA, Вы писали:

AR>Почему после этой строчки (сабж) а == 0х00000000; ерунда какая-то


Спасибо всем, кто хотел мне помочь. Пошел я стреляться. Не поминайте лихом
Re: Глюк с (unsigned short* a = new unsigned short[2];)
От: sercher Украина  
Дата: 12.11.03 13:33
Оценка:
Здравствуйте, Amon-RA, Вы писали:

AR>Почему после этой строчки (сабж) а == 0х00000000; ерунда какая-то


Выделяй на стеке Всего 4 байта-то
Re[7]: Глюк с (unsigned short* a = new unsigned short[2];)
От: _Jane_ Украина  
Дата: 12.11.03 13:34
Оценка:
Здравствуйте, Amon-RA, Вы писали:

1) а нет ли у тебя в коде киких-нибудь хитрых

#define <что нибудь из этой строки> <другое что-нибудь>


2) а если попробовать

   typedef unsigned short SomeType;
   SomeType* trInd = new SomeType[2];




AR>
AR>          unsigned short* trInd = new unsigned short[2];
AR>
Jane
Re[9]: Глюк с (unsigned short* a = new unsigned short[2];)
От: Lorenzo_LAMAS  
Дата: 12.11.03 13:36
Оценка:
Попробуй так
void fun()
{
    throw (std::bad_alloc());
}

//
std::set_new_handler(fun);
try
{
   unsigned short * p = new unsigned short[2];
}
catch(std::bad_alloc &)
{
   попадаешь ли ты сюда?
}
//
Of course, the code must be complete enough to compile and link.
Re[10]: Глюк с (unsigned short* a = new unsigned short[2];)
От: Amon-RA  
Дата: 12.11.03 13:38
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>Попробуй так

L_L>
L_L>void fun()
L_L>{
L_L>    throw (std::bad_alloc());
L_L>}

L_L>//
L_L>std::set_new_handler(fun);
L_L>try
L_L>{
L_L>   unsigned short * p = new unsigned short[2];
L_L>}
L_L>catch(std::bad_alloc &)
L_L>{
L_L>   попадаешь ли ты сюда?
L_L>}
L_L>//
L_L>


Ни фига не попал. Выделил память как миленький и вернул NULL
Re[10]: Глюк с (unsigned short* a = new unsigned short[2];)
От: BOPOH_N Россия  
Дата: 12.11.03 13:39
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

Если бы генерилось исключение он бы не попал на следующую строку.
В искустве летать есть один маленький секрет. Секрет этот в том,чтобы бросить себя изо всех сил на землю — и не попасть. Выберете погожий денек и попробуйте сами.
Re[11]: Глюк с (unsigned short* a = new unsigned short[2];)
От: Lorenzo_LAMAS  
Дата: 12.11.03 13:41
Оценка:
У вижуала (не помню какого) исключение не бросалось, а возвращался 0. Потому и set_new_handler я с таким обработчиком предложил
Of course, the code must be complete enough to compile and link.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.