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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> malloc и sizeof, чудеса с sizeof-ом 
V
    Опции темы
Dr_VOLAND
  Дата 25.9.2009, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 16.9.2007

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



Доброй ночи!
Видима глюки у меня, ПОЧЕМУ когда я хочу выделить память под long, и пишу: 
Код

long *var1;
var1 = (long*) malloc (20*sizeof(long));
printf("sizeof var1 = %d",sizeof(var1));

Код

Я ПОЛУЧАЮ:
>> sizeof var1 = 8!!!!


???
PM MAIL   Вверх
Anikmar
Дата 25.9.2009, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



А каков по вашему должен быть размер указателя?
PM MAIL ICQ   Вверх
Dr_VOLAND
Дата 25.9.2009, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 16.9.2007

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



вопрос хороший конечно, наверное написал я что не так. Но мне нужен размер ячейки памяти на каторую указывает указатель (звеняйте за каламбур)
PM MAIL   Вверх
zim22
Дата 25.9.2009, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(Dr_VOLAND @  25.9.2009,  22:08 Найти цитируемый пост)
размер ячейки памяти на каторую указывает указатель 

тогда к указателю нужно применить dereference operator и брать уже его sizeof
Код

sizeof(*val1)

***
так понятней?
Код


short *p;
int r = sizeof(*p);
r = sizeof(p);

class X {
  char buf[256];
} *ptr;
r = sizeof(ptr);
r = sizeof(*ptr);


Это сообщение отредактировал(а) zim22 - 25.9.2009, 22:27


--------------------
PM MAIL   Вверх
Anikmar
Дата 25.9.2009, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(zim22 @  25.9.2009,  22:22 Найти цитируемый пост)
тогда к указателю нужно применить dereference operator и брать уже его sizeof

И как это поможет в ситуации с malloc?
PM MAIL ICQ   Вверх
Dr_VOLAND
Дата 25.9.2009, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 16.9.2007

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



"я чувствовал это!!").  Спасибо Зим, но не помогло. Да я не написало, что собственно хочу увидеть - а увидеть хочу я 20*8.
Так как sizeof(long) - это 8, а 20 * sizeof(long) - соответсвенно 160.
PM MAIL   Вверх
Anikmar
Дата 25.9.2009, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(Dr_VOLAND @  25.9.2009,  22:34 Найти цитируемый пост)
"я чувствовал это!!").  Спасибо Зим, но не помогло. Да я не написало, что собственно хочу увидеть - а увидеть хочу я 20*8.
Так как sizeof(long) - это 8, а 20 * sizeof(long) - соответсвенно 160. 

Не получится.  smile 
PM MAIL ICQ   Вверх
Dr_VOLAND
Дата 25.9.2009, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 16.9.2007

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



вай?   ближе к делу, я сейчас копаюсь с pvm (для любознательных Parallel Virtual Machine). Так вот, мне нужно создать объемную переменную запаковать её и отправить слейву, на что дружок должен прислать мне привет. 
Вот и проблема у меня встала, как создать эту самую обьемистую переменную... без всякого напихивания паралона в неё.

Это сообщение отредактировал(а) Dr_VOLAND - 25.9.2009, 22:48
PM MAIL   Вверх
andrew_121
Дата 25.9.2009, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



что-то я не въезжаю.... кто задает вопрос, и кто отвечает?!

Цитата(Dr_VOLAND @  25.9.2009,  22:34 Найти цитируемый пост)
Так как sizeof(long) - это 8

что за железка, компилятор?

Добавлено через 8 минут и 45 секунд
Цитата(Dr_VOLAND @  25.9.2009,  22:34 Найти цитируемый пост)
20 * sizeof(long) - соответсвенно 160. 

так. что тебе нужно?
1. 160 бит?
2. 160 байт?
3. массив из 20-ти long-ов?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Dr_VOLAND
Дата 25.9.2009, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 16.9.2007

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



вспышка с лева, с права - появление профи и сразу вопрос по делу. ок. про железяку - работаю удаленно на серваке, посему знаю что AMD64, крутится фря, а компилятор gcc-шный 4.2.1
PM MAIL   Вверх
andrew_121
Дата 25.9.2009, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Цитата(Dr_VOLAND @  25.9.2009,  23:04 Найти цитируемый пост)
AMD64, крутится фря, а компилятор gcc-шный 4.2.1 

ок. значит sizeof(long) == 8. первое выяснили. далее.


Цитата(andrew_121 @  25.9.2009,  22:52 Найти цитируемый пост)
так. что тебе нужно?
1. 160 бит?
2. 160 байт?
3. массив из 20-ти long-ов?



Это сообщение отредактировал(а) andrew_121 - 25.9.2009, 23:08


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Dr_VOLAND
Дата 25.9.2009, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 16.9.2007

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



нужно 160 байт, запаковать их спецфункцией pvm_pklong и послать в космос
PM MAIL   Вверх
andrew_121
Дата 25.9.2009, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Код

long* buff = (long*)malloc(20*sizeof(long));
assert(buff);
int pack = pvm_pklong(buff, 20, ...);



--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Dr_VOLAND
Дата 25.9.2009, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 16.9.2007

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



я понимаю, и тоже так пишу... но вот в чем проблема, проверяя скорость передачи я вижу что скорость рукопожатия (посылки туда и обратно), для одного и 160 байтов у меня одинакова, этого не может быть. согласны? (сеть не гигабитная=)
поэтому я хочу чётко знать что посылаю 160 байт!

Это сообщение отредактировал(а) Dr_VOLAND - 26.9.2009, 00:40
PM MAIL   Вверх
andrew_121
Дата 26.9.2009, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



В этом фрагменте кода все в порядке. Смотри, возможно что-то еще у тебя не так.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0544 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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