C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Объясните, где в этих 2 строках кода ошибка ?
Евгений
Отправлено: 06.07.2004, 23:16


Не зарегистрирован







Код:

TStrings *TStr;

TStr->Add("1"); //вот здесь сразу же вылетает ошибка типа "ACCESS VIOLATION IN ADRESS ... IN MODULE ..."

В чём ошибка ?
Vlad
Отправлено: 07.07.2004, 07:46


Машинист паровоза

Группа: Участник
Сообщений: 231



TStrings *TStr= new TStringList();
вот и все!
Admin
Отправлено: 07.07.2004, 08:36


Владимир

Группа: Администратор
Сообщений: 1190



То-есть, теоретически:

во первых

Объекта класса TStrings создать нельзя,
можно создать объекты лишь от наследников этого класса,
каковым, например, и является TStringList

во вторых,

в своем примере TStrings *TStr вы создаете лишь указатель
на объект
, сам объект создается и для него выделяется нужная
память, как и написал Vlad, с помощью оператора new

в третьих

на будующее — в среде С++Builder нажмите F1 на интресующей
строке, у нас это — TStrings и сразу получите help, в котором и
есть описание:

CODE

void __fastcall TForm1::ButtonClick1(TObject *Sender)

{
  TStringList *TempList = new TStringList; // declare the list
  try{
     //use the string list
  }
  __finally{
   delete TempList; // destroy the list object
  }
}


в четвертых — в примере это есть — не забывайте удалять
объекты, если они вам больше не нужны — delete
Vlad
Отправлено: 08.07.2004, 07:47


Машинист паровоза

Группа: Участник
Сообщений: 231



Хотелось бы добавить: часто TStringList не нужен а реализовать можно и так
//*******************
String MakeCommand(String numCom)
{
String Command="";
TStrings *list = new TStringList();
list->LoadFromFile( (ExtractFilePath(Application->ExeName)+"commands\\"+numCom+".sql"));
for(int i=0;iCount;i++)
Command+=list->Strings[i];

delete list;
return Command;
}
//// Здесь все работает и без TStringList
AVC
Отправлено: 08.07.2004, 07:55


Ветеран

Группа: Модератор
Сообщений: 1583



Еще бы не работало. Вы же сами написали
QUOTE

TStrings *list = new TStringList();

Не заблуждайтесь. Это вам только кажется, что вы работаете с TSrings. На самом деле вы работаете с TStringList приведенным к TSrings.
Не верите — поробуйте так TStrings *list = new TStrings();
Евгений
Отправлено: 08.07.2004, 07:56


Не зарегистрирован







Большое спасибо! Без вашей помощи не разобрался бы. Спасибо!
Vlad
Отправлено: 08.07.2004, 08:03


Машинист паровоза

Группа: Участник
Сообщений: 231



>>На самом деле вы работаете с TStringList приведенным к TSrings
логично, абсолютно согласен! хотя большего и не нужно.....

Вернуться в Вопросы программирования в C++Builder