Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Spliver
Сообщений: n/a
#1

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

16.09.2011, 18:37. Просмотров 478. Ответов 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 возвращается полная ерунда, которую он и выводит.

Объясните пожалуйста, как правильно выделить память или где это сделать, чтобы программа отработала верно.
Заранее спасибо за помощь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2011, 18:37     Обращение к структуре в классе с выделением памяти
Посмотрите здесь:

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

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

Конструктор с выделением памяти - C++
Среди всех данных есть указатель, память для которого выделяется в конструкторе, необходимый размер передается в параметрах конструктора....

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

Не работает обращение к структуре - C++
#include <iostream> #include <string> using namespace std; struct VA { string Name; string Adres; string...

Работа со строками и выделением памяти - C++
Задание написать класс строк (что-то типа String). #define MAX 100 class ascii { private: char* str; int len; ...

Задача на строки с выделением памяти - C++
Добрый вечер, помогите с задачкой Выводит на экран только строки, состоящие из заданного количества слов. Возвращает количество прочих...

Строки с выделением динамической памяти - C++
Привет всем! Помогите решить вот такую задачу: Ввести две строки. Определить совпадение их слов (Первое слово 1 строки сравнить с первым...

Как обраиться к структуре в классе? - C++
как обраиться к структуре в классе. к указателю и массиву. #include <iostream> using namespace std; class cd { ...

Обращение к структуре - параметру класса - C++
#include <iostream> using namespace std; class Example{ public: struct mean{ int a; int...

Обращение к структуре из другого файла - C++
У меня есть 2 класса: Windows (окна) - содержащий ссылки на окна, и обрабатывающий события мыши Window (окно) - содержит спрайты и...

Почему не проходит обращение к структуре? - C++
#include <iostream> #include <string> using namespace std; int main() { const int size = 10; int z = 0;


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
16.09.2011, 19:02     Обращение к структуре в классе с выделением памяти #2
Цитата Сообщение от Spliver Посмотреть сообщение
// Выводится полная фигня, такое ощущение, что память выделяется только
// в пределах метода, а после уничтожается
так и есть, вы создали локалную переменную comps *components

надо писать просто
C++
1
components = (comps*)malloc(sizeof(comps)*10);
и да, почему не new ?
insolent
826 / 347 / 15
Регистрация: 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;
}
Spliver
Сообщений: n/a
16.09.2011, 19:27     Обращение к структуре в классе с выделением памяти #4
Цитата Сообщение от OstapBender Посмотреть сообщение
так и есть, вы создали локалную переменную comps *components

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

To insolent: конечно я везде ставлю return, просто здесь я делал вырезку кода, чтобы понятнее объяснить свою проблему
Yandex
Объявления
16.09.2011, 19:27     Обращение к структуре в классе с выделением памяти
Ответ Создать тему
Опции темы

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