Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Access violation... / 13 сообщений из 13, страница 1 из 1
02.02.2005, 12:47
    #32896802
Sr. Melifaro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access violation...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
// ----- Перевод из Win в Dos кодировку...
String WinToDos(String Stroka)
{
 String OutString;
 AnsiToOem(Stroka.c_str(), OutString.c_str());
 return OutString;
}

// ----- Запись файла...
   FILE *gpl;

   String Text = WinToDos(FileText->Text);

   gpl = fopen("Gpl00101.crd","a");

   char *a = new char[Text.Length()];
   strcpy(a,Text.c_str());

   fputs(a, gpl);
   fclose(gpl);

   StatusBar->SimpleText="Запись произведена!";

Этот код после выполнения производит запись в файл так как надо, но программа выдает Access violation...

Подскажите пожалуйста, в чем ошибка? У меня подозрение на то, что я не правильно передаю параметр в функцию... Или не правильно получаю из функции...

ЗЫ: Работаю с BC++ 6.0
...
Рейтинг: 0 / 0
02.02.2005, 12:52
    #32896823
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access violation...
Как минимум в "new char[..]" надо выделять длина_строки + 1 место из-за нулевого завершающего маркера
________________________________________________________
Глюк - это высокоорганизованная система не поддающихся определению частиц
...
Рейтинг: 0 / 0
02.02.2005, 12:57
    #32896839
Sr. Melifaro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access violation...
Упсь... поправил, только реакции нет... результат тот же...
...
Рейтинг: 0 / 0
02.02.2005, 13:15
    #32896896
Steppenwulf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access violation...
У Вас FileText->Text в какой-то момент передается пустым...
...
Рейтинг: 0 / 0
02.02.2005, 13:20
    #32896913
Sr. Melifaro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access violation...
Не может быть... Перед этим кодом стоит строка:
Код: plaintext
1.
FileText->Text = "* GPL00101.CRD    Последнее изменение: 01.02.05     Создано: 01.02.05\n";
...
Рейтинг: 0 / 0
02.02.2005, 13:21
    #32896917
Анатолий Широков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access violation...
В WinToDos проблема:

Код: plaintext
1.
String OutString; && пустая строка
AnsiToOem(Stroka.c_str(), OutString.c_str()); && растел памяти по адресу  0 , который вернула OutString.c_str()
...
Рейтинг: 0 / 0
02.02.2005, 13:25
    #32896935
Sr. Melifaro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access violation...
не понял... можно поподробнее объяснить?
...
Рейтинг: 0 / 0
02.02.2005, 13:31
    #32896950
Анатолий Широков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access violation...
Я достаточно подробно объснил.
...
Рейтинг: 0 / 0
02.02.2005, 13:32
    #32896961
Sr. Melifaro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access violation...
что значит "растел памяти по адресу 0"?
...
Рейтинг: 0 / 0
02.02.2005, 13:34
    #32896968
Анатолий Широков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access violation...
Это он и есть Access violation.
...
Рейтинг: 0 / 0
02.02.2005, 13:38
    #32896984
Sr. Melifaro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access violation...
Тоесть ошибка в том, что OutString - пустой.
Код: plaintext
1.
2.
String OutString = Stroka;
AnsiToOem(Stroka.c_str(), OutString.c_str());
Должно быть так?
...
Рейтинг: 0 / 0
02.02.2005, 13:45
    #32897011
Анатолий Широков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access violation...
Вообщем, Вам надо OutString инициализировать так, чтобы OutSting вместил все символы исходной строки Text. То что Вы привели это один из способов достижения этого.
...
Рейтинг: 0 / 0
02.02.2005, 13:48
    #32897021
roman10
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access violation...
Да.

А еще у вас ошибка при записи файла. При копировании строки вы не добавляете в конец завершающий нуль. И вообще операция копирования лишняя.

Можно и так:
fputs(Text.c_str(), gpl);
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Access violation... / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]