129 / 65 / 16
Регистрация: 03.09.2015
Сообщений: 832
|
||||||
1 | ||||||
Выводом данных из динамической структуры между функциями08.03.2018, 17:01. Показов 568. Ответов 4
Метки нет (Все метки)
Некорректно выводится информация из динамической структуры. Может затирается информация после основной функции?
Но если выводить через cout внутри somefunc (тот же procList[0].filepath), то все выводит корректно. Что не так?
0
|
08.03.2018, 17:01 | |
Ответы с готовыми решениями:
4
ООП.Разработать структуру элементов данных класса в виде динамической структуры данных Удаление и добавление элементов динамической структуры данных Программирование типовой динамической структуры данных(с использованием файловых переменнных) Разработка динамической структуры данных: deque |
3071 / 1409 / 425
Регистрация: 19.01.2009
Сообщений: 3,880
|
||||||
08.03.2018, 18:34 | 2 | |||||
ziqp, в строке 13, в filepath вы копируете указатель на текстовую строку, которая существует во фрейме стека somefunc(). После того как мы вышли из этой функции никто вам не гарантирует, что память, где раньше была переменная filename, и на которую указывает procList[N].filepath, будет оставаться в неприкосновенности. Проблему можно решить несколькими путями:
1) использовать std::string в структуре (имхо лучшее решение: 21 век на дворе); 2) изменить procStruct::filepath так что он будет не указателем, а тесктвовой строкой размером MAX_PATH, а в somefunc() уже обойтись без стековой переменной filename; 3) в строке 13 использовать strdup(), но затем не забыть удалить динамическую память, выделенную данной функцией. в первом аргументе опечатка? наверное имелось ввиду так:
1
|
129 / 65 / 16
Регистрация: 03.09.2015
Сообщений: 832
|
|
08.03.2018, 18:57 [ТС] | 3 |
Спасибо большое! string исправил положение. Только вот почему копировался указатель? Из-за *? Я так понял, нужно было делать фиксированный массив (если забыть про string)?
0
|
3071 / 1409 / 425
Регистрация: 19.01.2009
Сообщений: 3,880
|
|
08.03.2018, 21:58 | 4 |
0
|
129 / 65 / 16
Регистрация: 03.09.2015
Сообщений: 832
|
|
08.03.2018, 22:21 [ТС] | 5 |
Вместо char *filename поставил string filename.
Char легко присваивается к string, а обратно через .c_str(). По крайней мере, теперь работает вне функции
0
|
08.03.2018, 22:21 | |
08.03.2018, 22:21 | |
Помогаю со студенческими работами здесь
5
Создание динамической структуры данных типа список Разработка программы последовательной структуры с вводом-выводом данных Передача данных между функциями Выполнить упорядочение динамической структуры данных (линейного списка) по полю year Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |