| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > В функции класса невижу указатель. |
| Автор: JAnty 17.4.2007, 13:33 | ||
После запуска проги вылетает... |
| Автор: SenkraD 17.4.2007, 13:40 | ||
Не знаю у мя такой код работает
|
| Автор: _hunter 17.4.2007, 13:41 |
| где вылытает? как вылетает? что при этом отладчик показывает? |
| Автор: JAnty 17.4.2007, 14:14 |
![]() Хотя при этом FrmDoska->Caption = "qweqweqwe"; работает, но не в конструкторе, может вообще так нельзя делать в конструкторе? |
| Автор: Vyacheslav 17.4.2007, 14:18 |
| Уважаемый, но у Вас там же светится FrmDoska == NULL. Чего Вы хотите от бедной доски, когда ее еще нет |
| Автор: JAnty 17.4.2007, 14:23 |
| Это всё конструктор виновот негодяй, придётся без конструктора жить. :( ЗЫ и почему нет тогого смайла :( !!!??? |
| Автор: Vyacheslav 17.4.2007, 17:18 | ||
| Да причем тут конструктор? Насколько я понял, Вы пытаетесь сделать присвоение в конструкторе этого же FrmDoska. Ну так кто же мешает написать просто в теле конструтора ?
|
| Автор: JAnty 17.4.2007, 17:52 |
| с_doska::c_doska(void) { // тут формы не выдно... } конструктор класса не формы, а в моей функции с_doska_constructor заработало. |
| Автор: Klin 17.4.2007, 17:56 | ||
Насколько я знаю, массив с индексом 0 использовать нельзя. Там адресация происходит или что-то в этом роде... Насколько я знаю, массивы с VCL делаються так:
Добавлено через 1 минуту и 5 секунд Из постов не понял, то хоть написал? |
| Автор: SenkraD 17.4.2007, 18:03 | ||
| Сколько пишу ни разу ошибок и даже варнингов не было + в таком случае должен работать код (иначе будем иметь массив не с 33 элементов а с 32 ;-))
а он у мя ерор выдаёт А на счёт индексации, то я знаю, что в String'e в нулевом элементе размер лежит. |
| Автор: Klin 17.4.2007, 18:06 |
Весь код выложи Он динамически выделяет память, до тысячи с чем-то |
| Автор: SenkraD 17.4.2007, 18:16 |
| Klin, код я обычно не так пишу. Но вообще странно. (Только что проверил для случая с 33 34 элемент добавить можно выше маты гнёт) не подскажеш где можно почитать о таких приколах Buildera'a |
| Автор: Klin 17.4.2007, 18:27 |
| Не знаю, почем он ругается, может в настройках че не так Блин, не знаю, я сам методом тыка пол компьютера изучил |
| Автор: Vyacheslav 17.4.2007, 18:30 |
Модератор:Еще раз про приколы Builder и получите штраф. Нечего кривизну рук валить на продукт Особо грамотным. Массивы в С++ (Builder) начинаются с нуля. Если Вы краем уха слышали, что отсчет символов в классе AnsiString начинается с 1 , то причем тут массивы. В своем классе я тоже могу переопределить оператор [] и задать ему начало, ну, например, с 13. И что? |
| Автор: Klin 17.4.2007, 18:31 |
| Блин, сории до тыщи он конечно тянет, объявлять побольше надо. В процессе работы все ништяг, но по завершению действительно сквернословит p.s TImage *m[] = {new TImage(Form1)}; если так объявить, то без ошибок. Но не знаю, правильный ли он "грамотически" |
| Автор: SenkraD 17.4.2007, 18:39 | ||
Vyacheslav, я знаю что массивы в С++ начинаются с нуля и никогда не нарушаю правила С++ по работе с массивами. Я часто создаю двумерные массивы конторов в рантайме (интерфейсы в базах лежат), но просто пост Klin меня взбудоражил и я нарошно проверил и код
работает. О перегрузке операторов я тоже знаю и пользують + не краем уха а в книгах. P.S. Мне очень нравится Builder P.S.P.S. Прошу извениние за оффтоп да и вообще |
| Автор: Vyacheslav 17.4.2007, 18:49 | ||
| Ребяты. Запомните раз и навсегда. Классический С++ не проверяет выход за границу массива Поэтому вот это
явлется ошибкой, но компилятор ее не отловит. А грохнется или не грохнется программа это одному богу известно. Если за массивом легло что то используемое в программе, а Вы затерли, то соответсвенно получите exception. Если - нет, то все обойдется. |