Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глюки при динамическом создании массива, Или это я туплю... 
:(
    Опции темы
MuToGeN
Дата 15.5.2004, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: нет
Всего: 32



Код
char* buf;
buf=new char[statData.st_size];

В результате sizeof(buf) всегда равен 4, вне зависимости от того, чему равно statData.st_size. Если кол-во элементов указывать явно, типа buf=new char[300], то sizeof() выдаст 300, все как положено. То ли я билдер давно не видел, отвык, то ли хитрость тут какая...
Добавлено @ 15:05
З.ы. компилятор - BCB 6.0


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
sergejzr
Дата 15.5.2004, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Код
char* buf

buf это же указатель на массив. А величина указателя 4 байта и есть.

Ты создаёшь некий массив динамически, а buf просто указывает на этот массив.


Это сообщение отредактировал(а) sergej.z - 15.5.2004, 15:29


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
MuToGeN
Дата 15.5.2004, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: нет
Всего: 32



Thnx!
Точно, я туплю...


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
setq
Дата 15.5.2004, 15:28 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











извините, sergej.z, ну и что?

нет правда не доходит: какая разница в первом и втором случае?

Это сообщение отредактировал(а) setq - 15.5.2004, 15:29
  Вверх
sergejzr
Дата 15.5.2004, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



sizeof() определяется при компиляции, а откуда компилеру узнать размер массива, если тот меняется динамически в процессе программы.

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

char buf[300];
//В этом случае
//sizeof(buf)=300;
//setq, обрати внимание, в этом случае мы не декларируем buf как указатель.



А такое, тоже работать скорее всего не будет (скорее всего, потому что теоретически можно было написать компилер, который такие случаи распознаёт, только не нужно это smile.gif ).
Код

char* buf;
buf=new char[300];
//В этом случае
//sizeof(buf)=4;


Это сообщение отредактировал(а) sergej.z - 15.5.2004, 15:45


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
setq
Дата 15.5.2004, 15:44 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











MuToGeN пишет:

<<Если кол-во элементов указывать явно, типа buf=new char[300], то sizeof() выдаст 300, все как положено>>

sergej.z :
<<

char* buf;
buf=new char[300];
//В этом случае
//sizeof(buf)=4;

>>


поэтому и возник вопрос. но в общем понял, спасибо
  Вверх
MuToGeN
Дата 15.5.2004, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: нет
Всего: 32



Цитата
...указывать явно, типа buf=new char[300], то...
Сорри, видимо, тогда проверял со статичными массивами. Если buf=new char[300], то sizeof() тоже выдает 4. Всем спасибо, разобрался.



--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0473 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.