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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Заполнить выделенную динамическую память нулями 
:(
    Опции темы
Alca
Дата 22.8.2008, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 7
Всего: 50



И как через ZeroMemory()?


--------------------
PM WWW ICQ Skype Jabber   Вверх
UnrealMan
Дата 22.8.2008, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Обнулить поля POD-структуры можно не прибегая к библиотечным функциям:

Код

PodStruct object = {}; // на этапе инициализации
...
object = PodStruct(); // с помощью присваивания

PM MAIL   Вверх
mrbrooks
Дата 22.8.2008, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

Репутация: 2
Всего: 306



Alca
к примеру 
Код

#include <windows.h>
char *buf = new char[1028];
ZeroMemory(buf, 1028);
delete [] buf;


Добавлено через 1 минуту и 36 секунд
так же можно обнулить любую структуру
PM MAIL   Вверх
Alca
Дата 22.8.2008, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 7
Всего: 50



Надо заполнить структуру:
Код

//winsock2.h
struct  hostent {
        char    FAR * h_name;           /* official name of host */
        char    FAR * FAR * h_aliases;  /* alias list */
        short   h_addrtype;             /* host address type */
        short   h_length;               /* length of address */
        char    FAR * FAR * h_addr_list; /* list of addresses */
#define h_addr  h_addr_list[0]          /* address, for backward compat */
};
typedef struct hostent *PHOSTENT;

//инициализация
PHOSTENT  pHost;  // pHost - указатель



--------------------
PM WWW ICQ Skype Jabber   Вверх
mrbrooks
Дата 22.8.2008, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

Репутация: 2
Всего: 306



Код

ZeroMemory(pHost, sizeof(hostent));

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


Эксперт
****


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

Репутация: 7
Всего: 50



Код

sizeof(pHost);    //получаем размер указателя а не структуры



--------------------
PM WWW ICQ Skype Jabber   Вверх
mrbrooks
Дата 22.8.2008, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

Репутация: 2
Всего: 306



Alca, согласен но где это ты у меня видел?  smile

Добавлено через 1 минуту и 48 секунд
есесно что указатель вернет 4 байта. 
PM MAIL   Вверх
UnrealMan
Дата 22.8.2008, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mrbrooks @  22.8.2008,  16:03 Найти цитируемый пост)
так же можно обнулить любую структуру 

Никогда не понимал тех, кто так делает в плюсовых проектах.

Цитата(mrbrooks @  22.8.2008,  16:16 Найти цитируемый пост)
Код
ZeroMemory(pHost, sizeof(hostent));

Код
*pHost = hostent();

Какой вариант короче?

PM MAIL   Вверх
Alca
Дата 22.8.2008, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 7
Всего: 50



Не досмотрел, сорри... А можно получить размер структуры через указатель?

Это сообщение отредактировал(а) Alca - 22.8.2008, 15:28


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


трололомен
****


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

Репутация: 2
Всего: 306



но я то беру размер основной струтуры.

Добавлено через 1 минуту и 27 секунд
Цитата(Alca @ 22.8.2008,  15:26)
НА можно получить размер структуры через укащатель?

наврятли, но 100% утверждать не буду

Добавлено через 2 минуты и 43 секунды
UnrealMan, в  smile твой вариант короче, но для меня мой более наглядней для меня же  smile 
PM MAIL   Вверх
UnrealMan
Дата 22.8.2008, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Alca @  22.8.2008,  16:26 Найти цитируемый пост)
А можно получить размер структуры через укащатель? 

Код

sizeof(boost::remove_pointer<твой_указательный_тип>::type)

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


трололомен
****


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

Репутация: 2
Всего: 306



UnrealMan,  имхо но для этого нужно прикрутить boost! А это целая эпопея. По крайней мере у \me так было.
PM MAIL   Вверх
Alca
Дата 22.8.2008, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 7
Всего: 50



Код

PHOSTENT pHost;
ZeroMemory(pHost, sizeof(hostent));

Код

warning C4700: uninitialized local variable 'pHost' used

Boost, конечно вещь классная, но тягать её за собой чёта нехо....

Это сообщение отредактировал(а) Alca - 22.8.2008, 15:37


--------------------
PM WWW ICQ Skype Jabber   Вверх
Partizan
Дата 22.8.2008, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


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

Репутация: 4
Всего: 67



Alca, вы объявили указатель, а память не выделили...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
bsa
Дата 22.8.2008, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 63
Всего: 196



можно и проще:
Код
struct MyStruct
{
     ....
};

MyStruct *p;

size_t size = sizeof(*p);
Но надо иметь в виду, что если структура определена так:
Код
struct SomeDynamicSizeStruct
{
...
     DWORD data[0];
};
А затем под нее выделена память так:
Код
SomeDynamicSizeStruct *p = malloc(sizeof(SomeDynamicSizeStruct) + sizeof(DWORD)*10);
То sizeof (*p) возвратит то же, что и sizeof(SomeDynamicSizeStruct)
PM   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.1076 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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