Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с TStringList 
:(
    Опции темы
Ketzalkoatl
Дата 27.8.2007, 05:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 27.8.2007

Репутация: нет
Всего: нет



Народ, помогите кто может!
Я уже совсем голову сломал - ни фига не могу врубится что за засада!
Вроде все просто, но вылетает AV!

Короче ситуация такая:

Прог-а выполняется на Windows 2003. 
В цикле вызывается функция Function.
Код

int Function(void)
{
     TStringList *Otvet = NULL;

    if(!FileExists(FileFor1))
     return ERR_FILE_EXT_LOCAL;
    
    Otvet = new TStringList;
    Otvet->LoadFromFile(FileFor1);

    ..... код ......

    if(Otvet != NULL) delete Otvet;

};


Так вот вроде все работает нормально, но на третьем файле (постоянно на одном и том же)
при Otvet->LoadFromFile(FileFor1); вылетает AV.
Файл обычный, текстовой... 

Пробовал извращаться:
Код

int Function(void)
{
    Otvet = new TStringList;
    char *File = NULL;
    int len = 0, h = 0;

    h = open(FileFor1.c_str(), 0);
    len = filelength(h);
    close(h);

    File = (char *)malloc(len+1);
    ifstream infile(FileFor1.c_str(), ios::binary);
    infile.read(File, len);
    infile.close();
    File[len] = '\0';


   Otvet->Text = String(File);

    ..... код ......

    if(Otvet != NULL) delete Otvet;
    free(File);

};


Однако, при Otvet->Text = String(File); уже на 15-ом (одном и том же файле)
опять вылетает AV.

Мож есть у кого какие мысли?


PM MAIL   Вверх
akizelokro
Дата 27.8.2007, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: нет
Всего: 5



чти документацию (эт же Borland компилер?,- судя по T...)

"Creates a new TStringList object.

inline __fastcall TStringList(void) : TStrings() { }

Description

When creating a TStringList object, use the new keyword before the constructor to obtain an indirect reference to the string list."

перевести?


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
Ketzalkoatl
Дата 27.8.2007, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 27.8.2007

Репутация: нет
Всего: нет



Цитата(akizelokro @ 27.8.2007,  08:57)
чти документацию (эт же Borland компилер?,- судя по T...)

"Creates a new TStringList object.

inline __fastcall TStringList(void) : TStrings() { }

Description

When creating a TStringList object, use the new keyword before the constructor to obtain an indirect reference to the string list."

перевести?

Чту:
"При создании объекта TStringList, используйте новое ключевое слово перед конструктором, чтобы получать косвенную ссылку на список строк"

Дык и на что же намёк?
Можно попроще, для особо тупых?
 smile 
PM MAIL   Вверх
Fazil6
Дата 27.8.2007, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 11
Всего: 60



Цитата(akizelokro @  27.8.2007,  08:57 Найти цитируемый пост)
перевести?

переведи конечно. Чем это поможет?
PM MAIL   Вверх
akizelokro
Дата 27.8.2007, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: нет
Всего: 5



TStringList * sl = new TStringList();

*. "new" в С++  - непереводимое выражение. smile

Добавлено через 3 минуты и 46 секунд
Это я вшился. Понедельник smile 

Это сообщение отредактировал(а) akizelokro - 27.8.2007, 09:35


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
Ketzalkoatl
Дата 27.8.2007, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 27.8.2007

Репутация: нет
Всего: нет



Цитата(akizelokro @ 27.8.2007,  09:34)
TStringList * sl = new TStringList();

*. "new" в С++  - непереводимое выражение. smile

Дык и на что намек то?

Я не так чтоль делаю??? smile 

Код

TStringList * sl = new TStringList();


и

Код

TStringList *Otvet = NULL;
Otvet = new TStringList; 


не есть одно и тоже???? smile 
PM MAIL   Вверх
Fazil6
Дата 27.8.2007, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 11
Всего: 60



akizelokro, ну и дальше что?
PM MAIL   Вверх
akizelokro
Дата 27.8.2007, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: нет
Всего: 5



Ладно, прокололся.
Кстати, откомпилил твой второй вариант. Поменял File на buf. Вместо FileForl.c_str() грубо прописал "1.txt". Выдало AV, потому что файла 1.txt в текущем каталоге не было. Перебросил туда файл, код отработал нормально.

Кстати, AV выскочило не на строке Otvet->Text, а на предыдущей buf[len] = '\0'.

 smile Еще раз извинюсь за беспочвенный "совет". А что касается хотя бы второго варианта кода, то он рабочий. Если у тебя он не пашет проверь имя файла, который ты пытаешься прочесть, в каком каталоге он находится. Если это не поможет, у тебя взглюкнул компилер. Вопросы сервиспаков я здесь не обсуждаю. Я компилил в ВС++В 6, если охота, могу откомпилить в BDS 2006. Не думаю, что результат изменится.

Это сообщение отредактировал(а) akizelokro - 27.8.2007, 10:17


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
Ketzalkoatl
Дата 27.8.2007, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 27.8.2007

Репутация: нет
Всего: нет



Цитата(akizelokro @ 27.8.2007,  09:53)
Кстати, откомпилил твой второй вариант. Поменял File на buf. Вместо FileForl.c_str() грубо прописал "1.txt". Выдало AV, потому что файла 1.txt в текущем каталоге не было. Перебросил туда файл, код отработал нормально.

Дык ежу понятно что он и ДОЛЖЕН отработать нормально...
Но раз нормально, а раз - VA....
PM MAIL   Вверх
akizelokro
Дата 27.8.2007, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: нет
Всего: 5



Десять раз запустил прогу с твоим кодом (и моими поправками). Всё пашет и не фордыбачится.
Рекомендации см. выше.


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
Ketzalkoatl
Дата 27.8.2007, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 27.8.2007

Репутация: нет
Всего: нет



Цитата(akizelokro @ 27.8.2007,  10:15)
Десять раз запустил прогу с твоим кодом (и моими поправками). Всё пашет и не фордыбачится.
Рекомендации см. выше.

На какой ОСи гоняешь?
Я уже на Windows 2003 думаю. Мож дистр. левак???
Конечно же не лицензированная и без всяких СП....

На Хрюше СП 2 (официально зарегинная версия) - всё ваще без проблем пашет.....
PM MAIL   Вверх
akizelokro
Дата 27.8.2007, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: нет
Всего: 5



OS - XP Home Edition SP2 (лиц.)
У BDS 2006 идет два SP и HotFix
У BCB6 по-моему последний update - 4.
Но грешить на компилер дело последнее (к тому же, список ошибок известен).
Попробуй не применять такие выражения для переменных как File. Насколько я помню, это похоже на какое-то Дельфиевское объявление, а как они там внутрях коррелируют, - разбираться долгая песня. Вообще, применяй индивидуальные идентификаторы. Или выводи каждый раз для контроля название файла. Твой текстовый файл (формат .txt типа, но не своего формата .doc или .rtf) должен находиться в каталоге проекта или в каталогах, прописанных в PATH, если путь к нему ты не прописываешь полностью. Если ты его задаешь в ".....", то слэши могут съедаться. Что ты и увидишь при выводе названия файла.


Кстати, компилеры (дистрибутивы) с подозрительным происхождением, бывает, буксуют. Например, пробовал компилить на MDS ActiveX control. Так он при запуске в Ворде не давал мне доступа к пользовательским свойствам. Закачал Beta2 MDS2008 c сайта фирмы-производителя, он мне сразу все разрешил). Правда, одну багу я в нем уже нашел. И нашел одну веселую проблему, которой они std::string "отгружают".

Это сообщение отредактировал(а) akizelokro - 27.8.2007, 11:02


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0532 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.