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[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[9]: Глюк с (unsigned short* a = new unsigned short[2];)
От: denis-b  
Дата: 12.11.03 14:48
Оценка: +1
L_L>Да, про это Vi2 писал, но почему это влияет на выделение памяти?

Ну, кто знает, что там в этой запорченной памяти было.
Может какие описатели сегментов, которые говорят как куски памяти используются.
А это все очень запросто может повлиять на выделение памяти.

В общем пока хозяин не напишет, что эту странность исправил и все равно NULL возвращается, больше думать смысла не вижу. А хозяин похоже пиво пошел пить...
Глюк с (unsigned short* a = new unsigned short[2];)
От: Amon-RA  
Дата: 12.11.03 12:44
Оценка:
Почему после этой строчки (сабж) а == 0х00000000; ерунда какая-то
Re: Глюк с (unsigned short* a = new unsigned short[2];)
От: screw_cms Россия ICQ: 168185721
Дата: 12.11.03 12:48
Оценка:
Здравствуйте, Amon-RA, Вы писали:

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


Попробовал тестовый примерчик — у меня a == 0x002f1000...
When in doubt, use brute force. © Ken Thompson

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

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


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


_>Попробовал тестовый примерчик — у меня a == 0x002f1000...


Так в том то и дело, что у меня такая штука в двух местах. В одном не NULL, а другом NULL
Re[2]: Глюк с (unsigned short* a = new unsigned short[2];)
От: Amon-RA  
Дата: 12.11.03 12:51
Оценка:
Здравствуйте, BOPOH_N, Вы писали:


BOP>Приведи полный кусок кода.


{
unsigned short* trInd = new unsigned short[2];
trInd[0] = (unsigned short)uCount;
trInd[1] = (unsigned short)vCount;
.......
Re[3]: Глюк с (unsigned short* a = new unsigned short[2];)
От: sercher Украина  
Дата: 12.11.03 12:55
Оценка:
Здравствуйте, Amon-RA, Вы писали:

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



BOP>>Приведи полный кусок кода.


AR>{

AR>unsigned short* trInd = new unsigned short[2];
AR>trInd[0] = (unsigned short)uCount;
AR>trInd[1] = (unsigned short)vCount;
AR>.......


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

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


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



BOP>>>Приведи полный кусок кода.


AR>>{

AR>>unsigned short* trInd = new unsigned short[2];
AR>>trInd[0] = (unsigned short)uCount;
AR>>trInd[1] = (unsigned short)vCount;
AR>>.......


S> Это самый полный кусок кода, который я когда-либо видел


Смешно. Но зачем приводить то, что не имеет оотношения к делу. До этого и после этого нет ничего что так влияло бы на trInd
Re[3]: Глюк с (unsigned short* a = new unsigned short[2];)
От: BOPOH_N Россия  
Дата: 12.11.03 12:58
Оценка:
Здравствуйте, Amon-RA, Вы писали:

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



BOP>>Приведи полный кусок кода.


AR>{

AR>unsigned short* trInd = new unsigned short[2];
AR>trInd[0] = (unsigned short)uCount;
AR>trInd[1] = (unsigned short)vCount;
AR>.......

Это не есть полный код

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

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


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



BOP>>>Приведи полный кусок кода.


AR>>{

AR>>unsigned short* trInd = new unsigned short[2];
AR>>trInd[0] = (unsigned short)uCount;
AR>>trInd[1] = (unsigned short)vCount;
AR>>.......

BOP>Это не есть полный код


BOP>Попробуй перекомпилять весь проект


Перекомпилял. Щас застрелюсь
Re[5]: Глюк с (unsigned short* a = new unsigned short[2];)
От: Lorenzo_LAMAS  
Дата: 12.11.03 13:03
Оценка:
AR>Смешно. Но зачем приводить то, что не имеет оотношения к делу. До этого и после этого нет ничего что так влияло бы на trInd

Ну так если ты напишешь такое

int main()
AR>>>{
AR>>>unsigned short* trInd = new unsigned short[2];
AR>>>trInd[0] = (unsigned short)uCount;
AR>>>trInd[1] = (unsigned short)vCount;
AR>>>}



У тебя что, тоже нули????
Of course, the code must be complete enough to compile and link.
Re[3]: Глюк с (unsigned short* a = new unsigned short[2];)
От: sercher Украина  
Дата: 12.11.03 13:05
Оценка:
Здравствуйте, Amon-RA, Вы писали:

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


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


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


_>>Попробовал тестовый примерчик — у меня a == 0x002f1000...


AR>Так в том то и дело, что у меня такая штука в двух местах. В одном не NULL, а другом NULL


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

AR>>Смешно. Но зачем приводить то, что не имеет оотношения к делу. До этого и после этого нет ничего что так влияло бы на trInd


L_L>Ну так если ты напишешь такое


L_L>
L_L>int main()
AR>>>>{
AR>>>>unsigned short* trInd = new unsigned short[2];
AR>>>>trInd[0] = (unsigned short)uCount;
AR>>>>trInd[1] = (unsigned short)vCount;
AR>>>>}
L_L>



L_L>У тебя что, тоже нули????


Нет, не нули. Вот полный кусок (ну почти полный)

              int vertCount = 4;
          float* vertCoo = new float[vertCount*3];
          float* vertNorm = new float[vertCount*3];
          MyVector center(0,0,5);
          for(int ct = 0, index = 0; ct < vertCount; ct++, index += 3) 
          {
            MyVector pos(ct,ct,index);
            pos.subtract(center);
            vertCoo[index  ] = (float)pos.getX();
            vertNorm[index  ] = 0.0;
            vertCoo[index+1] = (float)pos.getY();
            vertNorm[index+1] = 0.0;
            vertCoo[index+2] = (float)pos.getZ();
            vertNorm[index+2] = 1.0;
          }
          float* vertMap = new float[vertCount*2];
          int  uCount = 4;
          int  vCount = 4;
          float vStep = 1.0f/(vCount-1);
          float uStep = 1.0f/(uCount-1);
          int v;
          for( v = 0, index = 0; v < vCount; v++) 
          {
            float vConst = v*vStep;
            for(int u = 0; u < uCount; u++, index += 2) 
            {
              vertMap[index  ] = u*uStep;
              vertMap[index+1] = vConst;
            }
          }
/*******************************************/
          unsigned short* trInd = new unsigned short[2];
          trInd[0] = (unsigned short)uCount;
          trInd[1] = (unsigned short)vCount;
/********************************************/
          CShape*  shp;
          shp = new CShape(
            vertCount,vertCoo,vertNorm,vertMap,0,trInd,true,true
          );
          msh = new CMesh(shp);
          getWorld().addObject(msh);;


ПОМОГИТЕЕЕЕЕ
Re[5]: Глюк с (unsigned short* a = new unsigned short[2];)
От: BOPOH_N Россия  
Дата: 12.11.03 13:07
Оценка:
Здравствуйте, Amon-RA, Вы писали:

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


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


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



BOP>>>>Приведи полный кусок кода.


AR>>>{

AR>>>unsigned short* trInd = new unsigned short[2];
AR>>>trInd[0] = (unsigned short)uCount;
AR>>>trInd[1] = (unsigned short)vCount;
AR>>>.......

BOP>>Это не есть полный код


BOP>>Попробуй перекомпилять весь проект


AR>Перекомпилял. Щас застрелюсь


Извени, а может у тебя все-же че-то типа:


unsigned short* trInd =0;
..........
{unsigned short* trInd = new unsigned short[2];}
trInd[0] = (unsigned short)uCount;
trInd[1] = (unsigned short)vCount

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



          int vertCount = 4;
          float* vertCoo = new float[vertCount*3];
          float* vertNorm = new float[vertCount*3];
          MyVector center(0,0,5);
          for(int ct = 0, index = 0; ct < vertCount; ct++, index += 3) 
          {
            MyVector pos(ct,ct,index);
            pos.subtract(center);
            vertCoo[index  ] = (float)pos.getX();
            vertNorm[index  ] = 0.0;
            vertCoo[index+1] = (float)pos.getY();
            vertNorm[index+1] = 0.0;
            vertCoo[index+2] = (float)pos.getZ();
            vertNorm[index+2] = 1.0;
          }
          float* vertMap = new float[vertCount*2];
          int  uCount = 4;
          int  vCount = 4;
          float vStep = 1.0f/(vCount-1);
          float uStep = 1.0f/(uCount-1);
          int v;
          for( v = 0, index = 0; v < vCount; v++) 
          {
            float vConst = v*vStep;
            for(int u = 0; u < uCount; u++, index += 2) 
            {
              vertMap[index  ] = u*uStep;
              vertMap[index+1] = vConst;
            }
          }
/*******************************************/
          unsigned short* trInd = new unsigned short[2];
          trInd[0] = (unsigned short)uCount;
          trInd[1] = (unsigned short)vCount;
/********************************************/
          CShape*  shp;
          shp = new CShape(
            vertCount,vertCoo,vertNorm,vertMap,0,trInd,true,true
          );
          msh = new CMesh(shp);
          getWorld().addObject(msh);;
Re[7]: Глюк с (unsigned short* a = new unsigned short[2];)
От: Lorenzo_LAMAS  
Дата: 12.11.03 13:10
Оценка:
[ccode]
AR>/*******************************************/
AR> unsigned short* trInd = new unsigned short[2];
AR> trInd[0] = (unsigned short)uCount;
AR> trInd[1] = (unsigned short)vCount;
AR>/********************************************/
//здесь то не 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);;
//а здесь ?
[/code]
Of course, the code must be complete enough to compile and link.
Re[8]: Глюк с (unsigned short* a = new unsigned short[2];)
От: Amon-RA  
Дата: 12.11.03 13:11
Оценка:
Здравствуйте, 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]

Так я и говорю, что ноль сразу после new unsigned short[2];
Re[7]: Глюк с (unsigned short* a = new unsigned short[2];)
От: sercher Украина  
Дата: 12.11.03 13:13
Оценка:
Имеется ввиду код, где выделяется память и те места где ты сравниваешь её. А так понятно, что всё ОК, разве что ты в конструктор CShape() по-ссылке передаёшь и там обнуляешь.
Re[9]: Глюк с (unsigned short* a = new unsigned short[2];)
От: Lorenzo_LAMAS  
Дата: 12.11.03 13:14
Оценка:
Ну, значит, ты как то умудрился всю память исчерпать? Кстати, new Должен исключение бросить
Of course, the code must be complete enough to compile and link.
Re[8]: Глюк с (unsigned short* a = new unsigned short[2];)
От: Amon-RA  
Дата: 12.11.03 13:15
Оценка:
Здравствуйте, sercher, Вы писали:


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


ЛЮДИИИИИИ Я не дохожу до CShape. Я вылетаю на trInd[0]=.....
Re[9]: Глюк с (unsigned short* a = new unsigned short[2];)
От: Lorenzo_LAMAS  
Дата: 12.11.03 13:17
Оценка:
AR>ЛЮДИИИИИИ Я не дохожу до CShape. Я вылетаю на trInd[0]=.....

Значит память всю сожрал!
Of course, the code must be complete enough to compile and link.
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[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: Глюк с (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.
Re[11]: Глюк с (unsigned short* a = new unsigned short[2];)
От: Lorenzo_LAMAS  
Дата: 12.11.03 13:42
Оценка:
L_L>>std::set_new_handler(fun);


Вот это написал?
Of course, the code must be complete enough to compile and link.
Re[12]: Глюк с (unsigned short* a = new unsigned short[2];)
От: BOPOH_N Россия  
Дата: 12.11.03 13:55
Оценка:
Попробуй подключи crtdbg.h
и перед (или после ) вызови _CrtMemDumpAllObjectsSince( 0 ); и посмотри чего у тебя в Output напишется
В искустве летать есть один маленький секрет. Секрет этот в том,чтобы бросить себя изо всех сил на землю — и не попасть. Выберете погожий денек и попробуйте сами.
Re[13]: Глюк с (unsigned short* a = new unsigned short[2];)
От: Lorenzo_LAMAS  
Дата: 12.11.03 14:00
Оценка:
BOP>Попробуй подключи crtdbg.h
BOP>и перед (или после ) вызови _CrtMemDumpAllObjectsSince( 0 ); и посмотри чего у тебя в Output напишется

Ничего подключать не буду, так как нет у меня вижуала. Только к чему ты все это? Что, там что — то про исключение напишется? А какой у тебя вижуал? Какой проект и т.д.?
Of course, the code must be complete enough to compile and link.
Re[14]: Глюк с (unsigned short* a = new unsigned short[2];)
От: BOPOH_N Россия  
Дата: 12.11.03 14:03
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

BOP>>Попробуй подключи crtdbg.h

BOP>>и перед (или после ) вызови _CrtMemDumpAllObjectsSince( 0 ); и посмотри чего у тебя в Output напишется

L_L>Ничего подключать не буду, так как нет у меня вижуала. Только к чему ты все это? Что, там что — то про исключение напишется? А какой у тебя вижуал? Какой проект и т.д.?


Извени это я не тебе а Amon-RA, предлагал. Функция (под Дебагом) выведет в Output инфу о занятой в куче памяти.
В искустве летать есть один маленький секрет. Секрет этот в том,чтобы бросить себя изо всех сил на землю — и не попасть. Выберете погожий денек и попробуйте сами.
Re[15]: Глюк с (unsigned short* a = new unsigned short[2];)
От: Lorenzo_LAMAS  
Дата: 12.11.03 14:05
Оценка:
аааа, ясно. только Амон-Ра видать уже пошел пиво пить.
Of course, the code must be complete enough to compile and link.
Re[16]: Глюк с (unsigned short* a = new unsigned short[2];)
От: Константин http://flint-inc.ru/
Дата: 12.11.03 14:10
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>аааа, ясно. только Амон-Ра видать уже пошел пиво пить.


Он же вроде, стреляться собирался?
Сорри, не сдержался... Больше не буду оффтопить.
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[17]: Глюк с (unsigned short* a = new unsigned short[2];)
От: Lorenzo_LAMAS  
Дата: 12.11.03 14:12
Оценка:
Ахх! Не уберегли!! Лажу насоветовали!
Of course, the code must be complete enough to compile and link.
Re[7]: Глюк с (unsigned short* a = new unsigned short[2];)
От: denis-b  
Дата: 12.11.03 14:36
Оценка:
Проверьте второй сдвоенный цикл, что стоит перед злополучным выделением памяти.
Я досконально не просматривал, но по-моему там index вылетает за пределы vertMap.
Ведь в vertMap 8 флоатов, а index похоже где-то до 32 дойдет.
Вполне возможно, что это и на выделение памяти как-то влияет.

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

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>/*******************************************/
AR>          unsigned short* trInd = 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: Глюк с (unsigned short* a = new unsigned short[2];)
От: Павел Кузнецов  
Дата: 12.11.03 14:36
Оценка:
Здравствуйте, Amon-RA, Вы писали:

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


А если исправить ошибку, на которую указал Vi2?
http://rsdn.ru/forum/Message.aspx?mid=440988&amp;only=1
Автор: Vi2
Дата: 12.11.03
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[8]: Глюк с (unsigned short* a = new unsigned short[2];)
От: Lorenzo_LAMAS  
Дата: 12.11.03 14:38
Оценка:
Да, про это Vi2 писал, но почему это влияет на выделение памяти?
Of course, the code must be complete enough to compile and link.
Re: Глюк с (unsigned short* a = new unsigned short[2];)
От: Amon-RA  
Дата: 13.11.03 07:56
Оценка:
Привет все.
Простите Христа ради, что из-за такой идиотской ошибки столько шуму поднял. Я видать на самом деле вылез за массив — как только это исправил, сразу стало все нормально. Спасибо всем. С меня пиво
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.