Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Spliver
1

Обращение к структуре в классе с выделением памяти

16.09.2011, 18:37. Просмотров 634. Ответов 3
Метки нет (Все метки)


Добрый день уважаемые форумчане.
Столкнулся с такой проблемой. Есть класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Components {
    struct  comps{ // -- База компонентов
        char name[50];
    };
    comps  *components;
 
    int ReadComponents();
    int ReadProducts();
};
 
 
int Components::ReadProducts() {
    int b = ReadComponents();
 
    printf ("Результат: %s",components[5].name);
    // Выводится полная фигня, такое ощущение, что память выделяется только 
        //   в пределах метода, а после уничтожается
}
 
int Components::ReadComponents() {
    comps  *components = (comps*)malloc(sizeof(comps)*10);
    strcpy(components[5].name,"Prostotak");
}
и
C++
1
2
3
4
int main(int argc, char **argv) {
    Components components;
    int a = components.ReadProducts();
}
Ожидаемый ответ работы программы: Prostotak
Однако выводится полная ерунда...

Похоже на то, что метод ReadComponents выделяет память, отрабатывает верно и после завершения эту память освобождает, таким образом к Components::ReadProducts возвращается полная ерунда, которую он и выводит.

Объясните пожалуйста, как правильно выделить память или где это сделать, чтобы программа отработала верно.
Заранее спасибо за помощь.
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.09.2011, 18:37
Ответы с готовыми решениями:

Запись адреса переменной как массив char (или повторное обращение за выделением памяти)
Здравствуйте формучане, встала такая задача, есть структура определяющая "мой тип", для нее был...

Выделение памяти только под часть полей в классе/структуре
Кто знает, возможен ли в C++ такой класс/структура, который может быть или одного вида с одним...

Обращение к структуре
Совсем не могу понять...Вот код #include <stdio.h> #include <stdlib.h> typedef struct...

Проблема с выделением памяти
Всем привет! Нужна помощь. Создаю класс и при компиляции возникает ошибка. Не пойму причину....

__________________
Помогаю в написании студенческих работ здесь.
Записывайтесь на профессиональные курсы C++ разработчиков
3
591 / 529 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
16.09.2011, 19:02 2
Цитата Сообщение от Spliver Посмотреть сообщение
// Выводится полная фигня, такое ощущение, что память выделяется только
// в пределах метода, а после уничтожается
так и есть, вы создали локалную переменную comps *components

надо писать просто
C++
1
components = (comps*)malloc(sizeof(comps)*10);
и да, почему не new ?
0
827 / 349 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
16.09.2011, 19:15 3
Spliver, в не void ф-ция всегда должен быть return. Из вне можно обращаться только к public методам или полям класса..
Так более правильнее..
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Components {
    struct  comps{ // -- База компонентов
        char name[50];
    };
    comps  *components;
 
public:
    int ReadComponents();
    int ReadProducts();
};
 
 
int Components::ReadProducts() {
    int b = ReadComponents();
 
    printf ("Результат: %s",components[5].name);
    // Выводится полная фигня, такое ощущение, что память выделяется только 
    //   в пределах метода, а после уничтожается
    return 0;
}
 
int Components::ReadComponents() {
    components = (comps*)malloc(sizeof(comps)*10);
    strcpy(components[5].name,"Prostotak");
 
    return 0;
}
0
Spliver
16.09.2011, 19:27 4
Цитата Сообщение от OstapBender Посмотреть сообщение
так и есть, вы создали локалную переменную comps *components

надо писать просто
C++
1
components = (comps*)malloc(sizeof(comps)*10);
и да, почему не new ?
Все заработало Большое спасибо!
Я портирую эту программу с C, еще не до конца разобрался с new

To insolent: конечно я везде ставлю return, просто здесь я делал вырезку кода, чтобы понятнее объяснить свою проблему
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.09.2011, 19:27

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

Проблемы с выделением памяти
Здравствуйте. Есть контейнер QList <Node *> В Node свой QList <Node *>. Строю программное...

Ошибка с выделением памяти
Помогите с прогой. Какая то ошибка с выделением памяти. В free_result пишет, что вызвано...

Проблема с выделением памяти
Пишу вычислительную задачу thread'ы+OpenGL, при загрузке программы контролирую переменную...

Ошибка с выделением памяти
выдает ошибку в выделении памяти. никто не подскажет почему? если что -задача звучит так примерно...


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

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

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