Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 08.09.2020
Сообщений: 2

Не могу понять, куда пропадают данные типа string в односвязном списке экземпляров класса

08.09.2020, 23:48. Показов 717. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте,форумчане. Изучаю С++ и написал динамическую структуру типа односвязный список, где данными выступает экземпляр класса. При попытке вывести данные в консоль,пропадают данные(типа string) из поля "name", данные из полей целочисленного типа отображаются корректно. Подскажите пожалуйста, в чем причина такого поведения?
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
class Production {
private:
    
    int number;
    int corpNumber;
public:
    string name;
    string getName() { return name; };
    void setName(string data) {  name = data; };
    int getNumber() { return number; };
    void setNumber(int data) { number = data; };
    int getCorpNumber() { return corpNumber; };
    void setCorpNumber(int data) { corpNumber = data; };
    friend ostream& operator<< (ostream &out, const Production* item);
};
ostream& operator<< (ostream &out, const Production* item)
{
    out << "Имя изделия: " << item->name<<"\n" << "Количество изделий: " << item->number << "\n"
        << "Номер цеха сборки:: " << "№" << item->corpNumber << "\n";
    return out;
};
 
struct list 
{
    Production* field;
    struct list* next;
    
};
 
struct list* init(Production* a) // а- значение первого узла
{
    struct list *lst;
    lst = (struct list*)malloc(sizeof(struct list));
    lst->field = (Production*)malloc(sizeof(Production));
    lst->field = a;
    lst->next = NULL; // это последний узел списка
    return(lst);
    // выделение памяти под корень списка
}
 
struct list* addelem(list *lst, Production item)
{
    struct list *temp, *p;
    temp = (struct list*)malloc(sizeof(list));
    p = lst->next; // сохранение указателя на следующий узел
    lst->next = temp; // предыдущий узел указывает на создаваемый
    temp->field = (Production*)malloc(sizeof(Production));
    temp->field = &item; // сохранение поля данных добавляемого узла
    temp->next = p; // созданный узел указывает на следующий элемент
    return(temp);
}
 
void listprint(list *lst)
{
    struct list* p;
        p = lst;
        do {
            cout << p->field; // вывод значения элемента p
            p = p->next; // переход к следующему узлу
        } while (p != NULL);
        
    
    
 
}
 
int main()
{
    setlocale(LC_ALL, "ru");
    list* a = NULL;
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) 
    {
        Production item;
        string name;
        cout << "Наименование: ";
        cin >> name;
        item.setName(name);
        cout << "\n";
        int count;
        cout << "количество изделий: ";
        cin >> count;
        item.setNumber(count);
        cout << "\n";
        int corp;
        cout << "Номер цеха сборки: ";
        cin >> corp;
        item.setCorpNumber(corp);
        if (a == NULL)
            a = init(&item);
        else addelem(a, item);
    }
    listprint(a);
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.09.2020, 23:48
Ответы с готовыми решениями:

Не могу понять, куда пропадают сотые
#include&lt;iostream&gt; #include&lt;iomanip&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt; class money { public: money(bool pr = true); ...

Сортировка элементов класса в списке по полю типа string
Ребята, прошу помощи. 3й день не могу реализовать. Есть список выражений, по числам и по алфавиту сортирую. Но как отсортировать по знакам...

Как найти max в списке из экземпляров объекта, класса?
Как найти max в списке из экземпляров объекта? Плаваю в ООП, в объектах class .... class Task(): description = '' ...

2
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12943 / 6810 / 1821
Регистрация: 18.10.2014
Сообщений: 17,234
09.09.2020, 01:10
Цитата Сообщение от z00diq Посмотреть сообщение
При попытке вывести данные в консоль,пропадают данные(типа string) из поля "name", данные из полей целочисленного типа отображаются корректно.
Вы выдумываете. У вас все "пропадает" абсолютно все: и наименование, и целочисленные денные, и все остальное.

Вы запихиваете в список указатели на локальные переменные

C++
1
2
3
4
5
...
a = init(&item);
...
temp->field = &item;
...
Потом локальные переменные уничтожаются. А вы пытаетесь выводить уничтоженные данные. Либо выводится мусор. Либо программа падает.

---

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

C++
1
2
3
4
5
6
7
    ....
    lst->field = (Production*)malloc(sizeof(Production));
    lst->field = a;
    ...
    temp->field = (Production*)malloc(sizeof(Production));
    temp->field = &item; // сохранение поля данных добавляемого узла[/quote]
    ...
?

И почему вы вообще пытаетесь создавать С++ объекты через malloc? Это не будет работать. Откуда вдруг взялся malloc?
1
0 / 0 / 0
Регистрация: 08.09.2020
Сообщений: 2
09.09.2020, 09:29  [ТС]
Благодарю за ответ, стало ясно в какое направление копать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.09.2020, 09:29
Помогаю со студенческими работами здесь

String, как создать глобальный массив из экземпляров этого класса?
Добрый день. Начал недавно изучать Visual Studio. Хочу создать в класс одним из полей которого должен быть String. В файле Global.h...

Хранение вектора экземпляров шаблонного класса неизвестного типа
Здравствуйте! Потребовалось хранить вектор экземпляров шаблонного класса неизвестного типа. Для выделения фиксированного шаблона с...

не могу понять что случилось с пк , пропадают аккаунты,перезагружается сам по себе
Добрый вечер , форумчане. Я к вам с таким вопросом: Купил пару месяцев пк с рук, все было нормально. Месяц спустя компьютер начал...

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

Не могу понять, куда делась память на SSD
Не могу понять, куда делась память на SSD. Сегдня произошло увеличение занятого объёма памяти. Я программировал, некорректно выполнил...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru