реклама на сайте
подробности

 
 
> большой массив в sizeof
landrey
сообщение Jul 7 2010, 12:33
Сообщение #1





Группа: Участник
Сообщений: 14
Регистрация: 10-11-07
Из: Харьков
Пользователь №: 32 220



Имею следующий кусок кода (упрощенно):
Код
struct sxModel{
  uint8_t model[1300];
};
typedef sxModel sxModels[32];
enum {
  ...
  CONST_N = CONST_M + sizeof(sxModels),
  ...
};

При компиляции получаю ошибку
Код
Error[Pe095]: array is too large
в строке
Код
CONST_N = CONST_M + sizeof(sxModels),

Если написать как
Код
CONST_N = CONST_M + sizeof(sxModel) * 32,

то ошибок нет. Как такое объяснить? И как такое побороть?
Так же sxModels участвует как составляющая другой структуры. У меня та структура не используется, но она описана в общем хэдере. После исправления на
Код
CONST_N = CONST_M + sizeof(sxModel) * 32,
появляется ошибка в той структуре:
Код
Error[Pe103]: class is too large


Компилятор IAR AVR 5.11, мк mega2560
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Jul 7 2010, 13:23
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



sizeof() возвращает результат типа int. В вашем случае размер массива структур не может быть представлен типом int, который в AVR 16-битный. Когда вы делаете sizeof(sxModel) * 32 вы получаете переполнение уже в процессе вычисления операции умножения.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th June 2025 - 01:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01354 секунд с 7
ELECTRONIX ©2004-2016