Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2007, 23:38   #1
Dergard
 
Регистрация: 26.09.2007
Сообщений: 4
По умолчанию Программа на C++ с использованием fstream

Помогите пожалуйста. Такая проблема. Имеется программа(код приложен) в ней 4 функции и одна главная.

первая создает файл в котором хранятся некоторые данные
вторая аналогично
третья создает третий файл который берет данные из первого и второго файла в запись и записывает в него.

четвертая позволяет просматривать созданный 3-й файл.

проблема в следуюшем: первая процедура работает отлично, вторая же вылетает после ввода имени файла с Abnormall terminate of program.
Вложения
Тип файла: txt KURR1.txt (5.4 Кб, 154 просмотров)
Dergard вне форума Ответить с цитированием
Старый 14.12.2007, 01:30   #2
theos
Форумчанин
 
Аватар для theos
 
Регистрация: 10.12.2007
Сообщений: 158
По умолчанию

Ты не выделяешь память под строку, в которой содержится имя файла. Странно, что 1я функция у тебя работает без ошибок (чистая случайность).

Когда ты определяешь переменную типа char*, ты создаёшь только указатель на область памяти, а не выделяешь область. Либо определяй переменную так:
Код:
char fname2[256];
(размещение в стэк - статическое, 256 - длинна), либо выделяй память после объявления:
Код:
fname2 = (char*)malloc(256*sizeof(char));
Тогда в конце функции не забудь освободить память:
Код:
free(fname2);
(malloc и free определены в файле stdlib.h)

Аналогично надо поступать и со строками в структурах. Главное - понять, что любой указатель (тип со *), это всего лишь адрес в памяти и при его определении эта память не выделяется. Это надо делать отдельно. А сам тип определяет, как обращаться с указателем, напр. если ты прибавляешь к указателю 1 (напр. fname += 1, то он смещается на кол-во байт, равное размеру данных типа. (напр для char - на 1, а для long - на 4 байта)

Код:
memset(&st,0,sizeof st);
Тут вообще грубая ошибка - параметры функции (в данном случае sizeof) в C надо всегда брать в скобки.
theos вне форума Ответить с цитированием
Старый 14.12.2007, 05:18   #3
Dergard
 
Регистрация: 26.09.2007
Сообщений: 4
По умолчанию

Спасибо огромное!!!
Dergard вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
пересчет таблицы с использованием макроса shematov Microsoft Office Excel 14 02.09.2008 11:24
Задача с использованием Graph GrabNik Паскаль, Turbo Pascal, PascalABC.NET 1 07.05.2008 22:47
Задачи с использованием ветвления n01R Помощь студентам 12 16.01.2008 11:54
Отправка сообщений с использованием POP3 AidarBik Работа с сетью в Delphi 7 08.01.2008 12:16
Программа с использованием функции Cartman18 Помощь студентам 1 10.12.2007 16:29