Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Warning: Размер CNumeric (число прочтений - 2400 )
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Warning: Размер CNumeric
09. Марта 2007 :: 20:19
Печать  
Добавил в класс несколько переменных типа CNumeric. В результате, 1С стала падать при выходе. Никаких действий с переменными не производилось - они были только добавлены. Заменил в определении CNumeric строку
Код
Выбрать все
UINT m_Buffer[4]; 


на
Код
Выбрать все
UINT m_Buffer[6]; 


Стало нормально. Возможно, заработало бы и на "UINT m_Buffer[5];" но было лень ребилдить весь проект.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Warning: Размер CNumeric
Ответ #1 - 10. Марта 2007 :: 11:03
Печать  

Корректный размер CNumeric 0x1C.
Т.е. буфер нужно убрать, но при этом исправить CValue и прочие зависимые классы.
« Последняя редакция: 10. Марта 2007 :: 14:38 - kms »  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Warning: Размер CNumeric
Ответ #2 - 10. Марта 2007 :: 14:41
Печать  
Каюсь, подвела невнимательность.
Размер CNumeric 0x2C, т.е. указан верно. Сорри.

Почему падает - не знаю, но при неверном размере класса будет падать в других местах, типа
Код
Выбрать все
void  AddProvToAccTotal(int,class CProvObj *,int,int,int,class CNumeric);	//835
 



+
плюс размер CValue автоматом плывет, а это отражается на размерах множества классов.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Warning: Размер CNumeric
Ответ #3 - 11. Марта 2007 :: 18:57
Печать  
Да, похоже, где-то у меня косяк был. Сейчас все нормально работает при размере 0x2C.

Когда ты сказал, что размер 0x1C, я убрал m_Buffer вообще. К моему удивлению 1С не начала падать и все вроде продолжало работать нормально Улыбка. Все встало на свои места, когда я пересобрал и запустил проект с тестами. Один класс с использованием CValue отвалился по AV, а другой класс с 3-мя CNumeric стал выдавать лажу. Короче, вернул "UINT m_Buffer[4]". Тогда все нормально - тесты проходят, 1С не падает.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Warning: Размер CNumeric
Ответ #4 - 11. Марта 2007 :: 22:42
Печать  
Uzhast писал(а) 11. Марта 2007 :: 18:57:
К моему удивлению 1С не начала падать и все вроде продолжало работать нормально

Windows хороша тем, что многие ошибки прощает или по-крайней мере не карает за них слишком строго. AV и AV.
Когда писал на асме под досом у меня несколько раз бывало слетала файловая система Ужас

Кстати, CNumeric забавный класс, ограничения на размер значений сверху, похоже, нет.
Разве что ворочать немеряно большие буфера, как правило, нелегко. Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать