Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
129 / 65 / 16
Регистрация: 03.09.2015
Сообщений: 832
1

Выводом данных из динамической структуры между функциями

08.03.2018, 17:01. Показов 568. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Некорректно выводится информация из динамической структуры. Может затирается информация после основной функции?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
struct procStruct     //Структура
{
    DWORD pid = 0;       
    char *filename; 
    char *filepath;   
};
 
void somefunc(procStruct procList, int procCount)
{
char filename[MAX_PATH];
//открываю хэндл hProcess
GetModuleFileNameEx(hProcess, NULL, filename, MAX_PATH);//пролучаю путь до файла
procList[procCount].filepath = filename;
}
 
int main()
{
procStruct *procList = new procStruct[cProcesses]; //создаю динамическую структуру
somefunc(procList, 0);
cout << procList[0].filepath;
}
В вывод получаются каракули нечитаемые.
Но если выводить через cout внутри somefunc (тот же procList[0].filepath), то все выводит корректно. Что не так?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.03.2018, 17:01
Ответы с готовыми решениями:

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

Удаление и добавление элементов динамической структуры данных
Структура &quot;Абитуриент&quot;: - фамилия, имя, отчество; - год рождения; - оценки вступительных...

Программирование типовой динамической структуры данных(с использованием файловых переменнных)
Есть информация о вещах, дан файл f, наименование вещей,сравнительный вес и проводимость: 1)найти...

Разработка динамической структуры данных: deque
Здравствуйте . Есть ли у кого то пример программы записи динамической структуры в бинарный файл, и...

4
Эксперт С++
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(), но затем не забыть удалить динамическую память, выделенную данной функцией.

Цитата Сообщение от ziqp Посмотреть сообщение
void somefunc(procStruct procList, int procCount)
в первом аргументе опечатка? наверное имелось ввиду так:
C
1
void somefunc(procStruct * procList, int procCount)
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
Цитата Сообщение от ziqp Посмотреть сообщение
string исправил положение
Покажите как исправили.

Цитата Сообщение от ziqp Посмотреть сообщение
Только вот почему копировался указатель
Потому что это наследие C.

Цитата Сообщение от ziqp Посмотреть сообщение
Я так понял, нужно было делать фиксированный массив
Да.
0
129 / 65 / 16
Регистрация: 03.09.2015
Сообщений: 832
08.03.2018, 22:21  [ТС] 5
Цитата Сообщение от schdub Посмотреть сообщение
Покажите как исправили.
Вместо char *filename поставил string filename.
Char легко присваивается к string, а обратно через .c_str().
По крайней мере, теперь работает вне функции
0
08.03.2018, 22:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.03.2018, 22:21
Помогаю со студенческими работами здесь

Создание динамической структуры данных типа список
Если кто поможет, буду благодарен! :yahoo: Надо записать в стек 5 целых чисел. Затем поменять...

Разработка программы последовательной структуры с вводом-выводом данных
Написать и отладить программу, выводящую на экран по два окна с эффектом тени (тень окрасить в...

Передача данных между функциями
Вопрос следующий: можно ли передать данные между функциями бкщ создание Глобал-переменных и без...

Выполнить упорядочение динамической структуры данных (линейного списка) по полю year
Ввести несколько записей (первое поле year которых представляет год выпуска автомобиля, а второе...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru