Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
vlad_light
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
1

Как выделить память на структуры

06.09.2013, 01:34. Просмотров 599. Ответов 5
Метки нет (Все метки)

у меня есть несколько типов и структура, некоторые поля которой могут иметь эти типы. Я реализовал это, например, так:
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
typedef struct
{
    //...
} A;
 
typedef struct
{
    //...
} B;
 
typedef struct
{
    //...
} C;
 
typedef struct
{
    void *struct1;
    void *struct2;
} D;


Также есть функция
C
1
void f (const char *data, D *d)
которая берёт информацию из data и записывает её в структуру d. В зависимости от data, в структуре d нужно использовать разные структуры A, B или C.
Теперь вопрос:
как я могу выделить память на структуры A, B или C в функции f так, чтоб они сохранились за пределами области видимости функции f?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2013, 01:34
Ответы с готовыми решениями:

Как выделить память под двумерный массив
b=(int **) calloc (n, sizeof(int *)); for (i=0; i<n; i++) b=(int *) calloc (m, sizeof(int));...

Как выделить память для массива структур?
выделить пямять для такой структуры на n элементов typedef struct coordinates { float x; float...

Как выделить память под массив структур?
Привет всем! Помогите, не знаю как выделить память под массив структур. #include <conio.h>...

Подскажите, как выделить динамическую память в функции?
Добрый вечерок^_^ Подскажите, как выделить динамическую память под матрицу внутри функции) Если...

Работа со структурой аэрофлот - как выделить память?
Создать структуру с именем аэрофлот и пунктами (указаны в структуре).Язык Си ПИшу структуру первый...

5
Jupiter
Каратель
Эксперт С++
6576 / 3997 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
06.09.2013, 01:46 2
malloc/calloc

Добавлено через 1 минуту
раздел си ниже
0
Jupiter
Каратель
Эксперт С++
6576 / 3997 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
06.09.2013, 01:55 3
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void f (const char* data, D* d)
{
    void* ptr = NULL;
    if (strcmp(data, "A") == 0)
        ptr = malloc(sizeof(A));
    else if (strcmp(data, "B") == 0)
        ptr = malloc(sizeof(B));
    else if (strcmp(data, "C") == 0)
        ptr = malloc(sizeof(C));
    else
        ; /* обработка лабуды */
 
    if (ptr == NULL)
    {
    /* обработка неуспешного выделения памяти */
    }
    ...
}

Не по теме:

Цитата Сообщение от vlad_light Посмотреть сообщение
я знаю, но туда намного меньше человек заходят
ну придет модер и выкинет тему в раздел си

1
vlad_light
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
06.09.2013, 02:12  [ТС] 4
C
1
2
3
4
void* ptr = NULL;
    if (strcmp(data, "A") == 0)
        ptr = malloc(sizeof(A));
        // ...
а после этого нужно написать
C
1
d->struct1 = ptr;
и, после исчезновения ptr в конце функции f, указатель d->struct1 будет указывать на правильный блок памяти? Т.е. можно сразу же написать так
C
1
2
if (strcmp(data, "A") == 0)
    d->struct1 = malloc(sizeof(A));
?

Не по теме:

тогда напишите свой вопрос в газете - их еще больше народу читает!
всё, всё, больше не буду так делать...:-[:-[:-[



Маленький вопрос не по теме.
C
1
2
3
void f (int *a) {(*a)++;}
int a = 0;
f (&a);
a = 1?
0
alsav22
5455 / 4850 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
06.09.2013, 02:22 5
Цитата Сообщение от vlad_light Посмотреть сообщение
Маленький вопрос не по теме.
Цитата Сообщение от vlad_light Посмотреть сообщение
a = 1?
Да.
1
Jupiter
Каратель
Эксперт С++
6576 / 3997 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
06.09.2013, 13:08 6
Цитата Сообщение от vlad_light Посмотреть сообщение
и, после исчезновения ptr в конце функции f, указатель d->struct1 будет указывать на правильный блок памяти? Т.е. можно сразу же написать так
да.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
06.09.2013, 13:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2013, 13:08

Как выделить динамическую память для матрицы?
Как выделить динамическую память для матрицы?

Как правильно выделить память под двумерный динамический массив
подскажите как правильно выделить память под двумерный динамический массив?

Как выделяется память под структуры?
Не могу понять как считается память под структуры. Если создать структруру без полей - пустую,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru