0 / 0 / 0
Регистрация: 10.05.2013
Сообщений: 17
|
||||||
1 | ||||||
Очистка памяти10.05.2013, 12:42. Показов 1939. Ответов 18
Метки нет (Все метки)
Цель:
Написать программу, которая читает текст из файла и записывает в новый файл те слова, которые содержат буквы, введенные с клавиатуры. Перед записью в новый файл упорядочить нужные слова по возрастанию. Использовать меню. Проблема: Программа работает правильно только один раз: Создать файл, обработать файл, просмотреть файл. Если после этих действий попробовать заново создать файл, а затем обработать его, то вместо текста будут различные иероглифы, если вообще не зависнет. Догадки: Проблема с очисткой памяти. Вот только где? Поэтому прошу помощи. Выложу полный код программы, потому что могу только догадываться, где есть ошибка (думаю, что в функции read). Код программы (извините за транслит):
0
|
10.05.2013, 12:42 | |
Ответы с готовыми решениями:
18
очистка памяти Очистка памяти Очистка памяти Очистка памяти |
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
|
|||||||||||
10.05.2013, 13:06 | 2 | ||||||||||
Пока что я увидел одну большую ошибку! Не пишите
1
|
0 / 0 / 0
Регистрация: 10.05.2013
Сообщений: 17
|
|
10.05.2013, 13:11 [ТС] | 3 |
Спасибо, учту!
0
|
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
|
|
10.05.2013, 13:13 | 4 |
Поехали дальше. что у Вас за среда?
Добавлено через 52 секунды у меня оно даже не компилируется)
1
|
0 / 0 / 0
Регистрация: 10.05.2013
Сообщений: 17
|
|
10.05.2013, 13:15 [ТС] | 5 |
Эту программу писал на борланде.
Так быстрее, чем на вс, и сдавать мне надо на нем же)
0
|
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
|
|
10.05.2013, 13:25 | 6 |
ошибка в чтении файла есть. Оно его читает неправильно
Добавлено через 2 минуты если не поставить точку в конце файла, то оно творит ужас Добавлено через 1 минуту честно говоря, в функции read я запутался в переменных
1
|
0 / 0 / 0
Регистрация: 10.05.2013
Сообщений: 17
|
||||||
10.05.2013, 13:26 [ТС] | 7 | |||||
На второй раз?
Первый раз у меня правильно создает, обрабатывает и просматривает (пункты меню 1, 2, 3). Второй раз правильно создает и просматривает (1, 3). После обработки начинается непонятно что. Может ли быть ошибка здесь:
0
|
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
|
|
10.05.2013, 13:30 | 8 |
Куча разных символов в файле появляются, если в конце читаемого файла не поставить точку. А так все работает
1
|
0 / 0 / 0
Регистрация: 10.05.2013
Сообщений: 17
|
|
10.05.2013, 13:32 [ТС] | 9 |
Да, так написал, что точка обязательна (признак конца текста, на ней часть циклов останавливается) А теперь попробуйте создать файл, обработать, прочитать (1, 2, 3), а затем, после вывода содержимого файла на экран (пункт 3), после возвращения в меню (не закрывая программу), снова создайте файл, обработайте и прочитайте.
0
|
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
|
|
10.05.2013, 13:33 | 10 |
1
|
0 / 0 / 0
Регистрация: 10.05.2013
Сообщений: 17
|
|
10.05.2013, 13:35 [ТС] | 11 |
0
|
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
|
|
10.05.2013, 13:35 | 12 |
Я понял в чем ошибка. Когда второй раз создается файл в конце не ставится точка!
1
|
0 / 0 / 0
Регистрация: 10.05.2013
Сообщений: 17
|
|
10.05.2013, 13:42 [ТС] | 13 |
0
|
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
|
|
10.05.2013, 13:46 | 14 |
согласен. Забыл точку поставить.
Но я выполнил действия, которые Вы сказали. У меня все работает.
1
|
0 / 0 / 0
Регистрация: 10.05.2013
Сообщений: 17
|
|
10.05.2013, 13:52 [ТС] | 15 |
А вот это странно. У меня на второй раз либо пустой экран, либо зависает, либо даже вместо меню появляются иероглифы.
Нет, точку все же записывает.
0
|
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
|
|
10.05.2013, 13:56 | 16 |
Don Caballero, честно говоря, Ваш код очень сложный и запутанный. Я могу Вам предложить немного его переделать на потоки, стринги и мультисеты(если у Вас есть время этим заниматься).
На счет ошибки могу сказать одно. Надо построчно дебажить и все время смотреть что куда и как оно пишет. У меня действительно все работает. Кст, очень странно, что вместо меню могут появится иероглифы.
1
|
0 / 0 / 0
Регистрация: 10.05.2013
Сообщений: 17
|
|
10.05.2013, 14:13 [ТС] | 17 |
Я сам удивлен был, почему меню даже изменилось.
Проблема в том, что мне эту программу надо сделать объектно-ориентированной. А для этого нужно, чтобы исходная работала нормально. Спасибо за помощь! Все-таки попробую понять, почему на определенном моменте выполнения программа начинает писать ерунду в массив txt. Добавлено через 13 минут Все-таки я думаю, что если у меня в 1 раз работает нормально, а во второй не работает, но у Вас работает всегда то это: 1) Очистка памяти. 2) Она зависит от компилятора, обычно память очищается при выходе из компилятора, но может быть в настройках есть опция очистки памяти при выходе из функций.
0
|
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
|
|
10.05.2013, 14:15 | 18 |
Don Caballero, в каком месте очищается память?
1
|
0 / 0 / 0
Регистрация: 10.05.2013
Сообщений: 17
|
|
10.05.2013, 20:27 [ТС] | 19 |
Скорее всего второй раз программа не работает из-за того, что где-то в памяти остались записи после первого раза, и эти записи тотально портят работоспособность программы. Я не знаю где очищать память и как ее очищать. Конечно, я пробовал все массивы после работы с ними заполнять пустыми значениями - strcpy(массив, ""), но это не помогло.
Добавлено через 10 минут Если у кого-то еще будут предложения - пишите, я слежу за темой. Добавлено через 5 часов 48 минут Убрал все глобальные переменные, обозначив их как локальные, включая объявление 2 файлов - результат такой же, не работает на 2 раз
0
|
10.05.2013, 20:27 | |
10.05.2013, 20:27 | |
Помогаю со студенческими работами здесь
19
Очистка памяти очистка памяти Очистка памяти delete[]; Очистка динамической памяти указатели и очистка памяти Очистка памяти массива (С++) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |