![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Валерия |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 10.3.2007 Репутация: нет Всего: 8 |
Файл 1.txt:
Программа выдает
Почему последний символ выводиться на экран дважды? |
||||||
|
|||||||
| apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
попробуй так т.е проверку на конец файла сделать дважды Это сообщение отредактировал(а) apook - 7.4.2007, 14:32 -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
| Валерия |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 10.3.2007 Репутация: нет Всего: 8 |
Спасибо, помогло.
|
|||
|
||||
| codelord |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 1 Всего: 39 |
что то не понятно как у тебя вообще заработала эта программа, у меня ошибки, собственно и понятно, зачем тебе
string если ты берешь его длину, при этом его длина как раз заведомо меньше даже небольшой строки, делать проверки два раза тоже не красиво.
Добавлено через 3 минуты и 53 секунды char *msg; где собственно память под это? возьми файл где строки скажем хотя бы длины так по 100 символов, и это должно будет вылезти. Это сообщение отредактировал(а) codelord - 7.4.2007, 14:33 |
|||
|
||||
| Валерия |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 10.3.2007 Репутация: нет Всего: 8 |
Тоесть если я просто объявляю
char *var1; то не резервирую память, и оно может полезть на память скажем, компилятора и зависнуть все нафик? Добавлено через 6 минут и 36 секунд ... char *buff; memset(buff, 0, 256): ... такое резервирование катит? |
|||
|
||||
| nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
Валерия, да, память нужно выделять отдельно.
Не инициализированный указатель указывает неизвестно куда, если попытаться записать туда что-нибудь на память других программ не залезешь (у каждой программы своё адресное пространство), но можно затереть себе что-нибудь (хуже) или схлопотать access violation/segfault (немного лучше) Нет, это как раз наглое затирание нулями чего-то. Память нужно или выделить динамически (malloc в C/new в C++) и не забыть освободить потом (free/delete) или указать адрес существующей переменной, например.
Это сообщение отредактировал(а) nickless - 9.4.2007, 17:12 -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
| Валерия |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 10.3.2007 Репутация: нет Всего: 8 |
Поняла когда побольше заперла туды, выкинуло.
А вот FILE *fp; такое резервирование тоже получаться не правильное... Ведь те несколько байт, в которых содержится дескриптор, тоже могут полезть не на то что надо? Добавлено через 4 минуты и 32 секунды А вот это написано по всем правилам? (учусь правильно писать). И будет ли оно везде одинаково работать? Скажем там под линуксом...
|
|||
|
||||
| nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
С FILE *fp всё нормально, fopen аллокирует память сам, тут нужно по идее только проверять открылся ли файл
-------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
нет, не катит, memset() не выделяет память, а устанавливает в определенное значение. Юзай malloc() или new (в С++).
тут другой случай, система открывает заданный файл, а тебе дает его handle, а ты дальше за этот handle им (файлом) управляешь. |
|||
|
||||
| nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
Не будет, в линуксе нет диска D: А вообще main должна по стандарту возвращать int, и добавь в конце цикла while
Это сообщение отредактировал(а) nickless - 9.4.2007, 00:36 -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
| apook |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
nickless
и какой компилятор на это не ругнулся? тагда уж
или
Это сообщение отредактировал(а) apook - 9.4.2007, 05:17 -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
||||||||
|
|||||||||
| Валерия |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 10.3.2007 Репутация: нет Всего: 8 |
Как ни странно но последняя строка не записалась в файл два раза
Добавлено через 2 минуты и 7 секунд А вот еще такой вопрос. Если я не делаю free для возврата памяти, и fclose для закрытия файла. Что в этом будет плохого? По идее после завершения работы программы она сама всё закроет и высвободит. Или времени больше на это нужно будет? |
|||
|
||||
| nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
Сорри, & лишнюю написал Валерия, если не освобождать память в маленькой программе как эта, ничего не будет, но если память выделяется в других функциях или особенно в цикле, а программа расчитана на продолжительную работу, то память может очень быстро кончится Так что освобождать надо всё всегда и везде, чтобы вошло в привычку (исключения только в исключительных случаях). А у меня записалась, странно... Это сообщение отредактировал(а) nickless - 9.4.2007, 17:22 -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |