- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
typedef char char_array_2 [2] ;
typedef char char_array_3 [3] ;
typedef char char_array_22[32];
/* ... */
if( 0 == (purpose = new char_array_3[ dArraySize ] ) )
{
ALLOC_ERROR();
}
if( 0 == (mode = new char_array_3[ dArraySize ] ) )
{
ALLOC_ERROR();
}
if( 0 == (state = new char_array_2[ dArraySize ] ) )
{
ALLOC_ERROR();
}
if( 0 == (referencedate = new char_array_22[ dArraySize ] ) )
{
ALLOC_ERROR();
}
/* и еще десяток в таком же стиле */
С++ в (болгарские) массы. и пусть только попробуют сказать что мы ошибок выделения памяти не обрабатываем.
ЗЫ самый прикол что код который этой памятью пользуется 100% совместим с std::vector<std::string>. хотя я бы лично все строки в структуру загнал (и структуры в вектор) бо 10+ массивов это говно.
теперь и это говно продется фиксить: через 4-5 уровней макросов, можно увидеть что это "фатальная ошибка" и она обрабатывается .. печатанием сообщения на stdout... идиоты даже эксепшена не бросают.
if( 0 == (purpose = new char_array_3[ dArraySize ] ) )
{
throw MEM_ALLOC_ERR;
}
Вот и стало интересно, что же макрос делает, а то у меня в текущем проекте макросы делают все что хочешь, только не то, что надо. :)
З.Ы.Сразу подозревал, что обработка некорректная)
typedef char char_array_2 [2] ;?
В смысле, что значит "[2]"?
Ну об этом хоть догадался, но char_array_22[32] уже не осилил.
нет, это "char[dArraySize][3]", алоцируется dArraySize элементов типа char[3].
там char_array_2 прикольней используется: strcpy( state[mCurrRow], "A" ) или strcpy( state[mCurrRow], "D" )... т.е. там 2 элемента бо они копипастили тучи кода. оно там в общую картину вписывает, поэтому с первого взгляда какое это ГК и не догадываешься.