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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> выделение памяти под элемент структуры (malloc) 
:(
    Опции темы
shtuceron
Дата 28.5.2011, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Добрый день, почему-то не работает конструкция вида

Код

typedef struct MyStruct {
  unsigned char *data;
};

MyStruct myStructInit;

myStructInit.data = (unsigned char *)malloc(sizeof(char)*10);


Однако без typedef все работает прекрасно.

вроде задачка элементарная, однако у меня затруднения.

Спасибо (компилятор GCC 4.2)

PM MAIL WWW   Вверх
volatile
Дата 29.5.2011, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 16
Всего: 85



так вы не дописали до конца тайпдеф.

Код

typedef struct somename {
  unsigned char *data;
} MyStruct;

либо безымянную
Код

typedef struct  {
  unsigned char *data;
} MyStruct;


PM MAIL   Вверх
borisbn
Дата 29.5.2011, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 21
Всего: 135



shtuceron, на каком языке ты пишешь ? На Си или на Си++ ? Дело в том, что в этой части (объявление и описание структур) эти языки довольно сильно отличаются. Если Си - то volatile дал исчерпывающий ответ, если Си++, то лучше описывать структуру без typedef'а вообще.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
sergioK1
Дата 29.5.2011, 09:04 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(borisbn @ 29.5.2011,  07:53)
shtuceron, на каком языке ты пишешь ? На Си или на Си++ ? Дело в том, что в этой части (объявление и описание структур) эти языки довольно сильно отличаются. Если Си - то volatile дал исчерпывающий ответ, если Си++, то лучше описывать структуру без typedef'а вообще.

так на С++ и malloc вроде бы не нужен,
у меня ощущение что многие изучают С ,но файл называют cpp, частично используя возможности c++,
но не используют объесты,

Я прав ??

PM MAIL   Вверх
triclosan
Дата 29.5.2011, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



sergioK1ДА!
PM MAIL   Вверх
borisbn
Дата 29.5.2011, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 21
Всего: 135



Цитата(sergioK1 @  29.5.2011,  09:04 Найти цитируемый пост)
у меня ощущение что многие изучают С ,но файл называют cpp, частично используя возможности c++,но не используют объесты,Я прав ??

ДА!

частенько попадаются вопросы по велосипедному списку, где всё Си-шное (struct List, malloc/free и т.п.), а для вывода используется std::cout smile


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
sergioK1
Дата 29.5.2011, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(borisbn @ 29.5.2011,  08:26)


частенько попадаются вопросы по велосипедному списку, где всё Си-шное (struct List, malloc/free и т.п.), а для вывода используется std::cout smile


у меня контр-вопрос а чем это плохо,? естесно если понимаешь разницу, 
почему для массива надо пользовать new , который все равно мalloc зовет, ? 
или printf внутри класса,  или класс стринг , если он мне в данной задаче не нужен, почему не char* как в С ?

 С++ он же не вместо С он в дополнение, 


Это сообщение отредактировал(а) sergioK1 - 29.5.2011, 16:37
PM MAIL   Вверх
borisbn
Дата 29.5.2011, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 21
Всего: 135



Цитата(sergioK1 @  29.5.2011,  15:27 Найти цитируемый пост)
почему для массива надо пользовать new , который все равно мalloc зовет, ?

ессно, если понимаешь разницу, то всё равно, но... и на страруху бывает проруха... по закону подлости один раз из 100 ты напишешь
Код

int * p = (int*) malloc( count );

не умножив на sizeof. тупо забудешь. и хорошо, если упадёт сразу - исправишь. а если через день работы программы
 
Цитата(sergioK1 @  29.5.2011,  15:27 Найти цитируемый пост)
или класс стринг , если он мне в данной задаче не нужен, почему не char* как в С

то же самое. забудешь выделить память под завершающий '\0'...

от невнимательности - усталость, спешка (проект нужен завтра или никогда), куча других забот в голове - никто не застрахован.


Цитата(sergioK1 @  29.5.2011,  15:27 Найти цитируемый пост)
или printf внутри класса

а вот это скорее исключение, подтверждающее правило. сам пользую из-за форматного вывода, который в iostream настолько гемороидальный, что плюю на возможные проблемы типа
Код

float f = -1234.6;
char s[ 7 ];
sprintf( s, ".1f", f );


Это сообщение отредактировал(а) borisbn - 29.5.2011, 17:49


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
volatile
Дата 29.5.2011, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 16
Всего: 85



Код

typedef class  {
    int data;
} Myclass;

Походу. Это какой язык С или С++ ?  smile 
На С он не скомпилится, так что это явно не С.
Но и С++ назвать как-то рука не поднимается, хотя компилится спокойно на любом С++. (даже на gcc!!!)

С++ позволяет делать многие вещи. за это его ругают, и за это же хвалят.

(не обращайте внимания, так, мысли вслух...)

Добавлено через 2 минуты и 11 секунд
Цитата(borisbn @  29.5.2011,  17:45 Найти цитируемый пост)
 iostream настолько гемороидальный

 smile 
PM MAIL   Вверх
sergioK1
Дата 29.5.2011, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(volatile @ 29.5.2011,  17:18)
Код

typedef class  {
    int data;
} Myclass;

Походу. Это какой язык С или С++ ?  smile 
На С он не скомпилится, так что это явно не С.
Но и С++ назвать как-то рука не поднимается, хотя компилится спокойно на любом С++. (даже на gcc!!!)

С++ позволяет делать многие вещи. за это его ругают, и за это же хвалят.

(не обращайте внимания, так, мысли вслух...)

Добавлено @ 18:21
Цитата(borisbn @  29.5.2011,  17:45 Найти цитируемый пост)
 iostream настолько гемороидальный

 smile

еще лучше пример 

Код


  class NoAccess{
public :
    int getValue(){
        return value;;
    }
private :
    int value;
    NoAccess(){
        value=10;
    }
};


Код

   NoAccess* noacess=(NoAccess*)malloc( sizeof(NoAccess));

    cout<<noacess->getValue()<<endl;


когда учился профессор наш любил на экзаменах всякие штучки типо этой ,
потом приговаривал , это язык для ненормальных  smile  smile 



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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