На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Модераторы: Qraizer
  
> Тыкните носом в ошибку плз...
    CSString::CSString():str(NULL),Allocate(0)
    {
    *this="";
    }

    CStr& CStr::operator = (const char* _str)
    {
    DWORD _strLen=strlen(_str);
    if(Allocate<=_strLen)
    {
    if(str!=NULL) delete[] str;
    str=new char[_strLen+1];
    Allocate=_strLen+1;
    }
    memcpy(str,_str,Length+1);
    //^^^^^^^^^^^^^ Exception. Acces volution.
    //хотя str[0]=_str[0]; -- всё хокей.
    SetLen();
    return *this;
    }
    //Ну там ещё много всяких проверок, но вот в этом куске у меня ошибка.
    // Понимаю что ДНК не изменишь... :)
    main()
    {
    CStr str; //Валимся....
    }
      A-a-a-a-a-a-a-a-a-a!!!!!!!!!
      Убейте месагу!!! Как меня закоротило! Пол часа бился над этим эксцепшином!!!
      А ведь надо было просто
      memcpy(str,_str,Length+1);
      Length ведь ещё не проинициализирован! А-а-а!
      purpe, убей мой экаунт вообще -- я это заслужил.
        зря ты так, это ведь очень частая ошибка, ничего страшного если программисты лишний раз намотают себе на ус :)
          "A-a-a-a-a-a-a-a-a-a!!!!!!!!!
          Убейте месагу!!! Как меня закоротило! Пол часа бился над этим эксцепшином!!!
          А ведь надо было просто
          memcpy(str,_str,Length+1);
          Length ведь ещё не проинициализирован!"
          Все правильно. Как раз об этом я тебе и написал. Но когда нажал кнопочку "Ответить" у меня сеть повисла...Тама еще одна (во всяком случае для меня) непонятность. Конструкция *this="";. Смутно представляется чего хочется, но луше так пустой объект не инициить, поскоку в конструкторе ишшо нет указателя на этот объект (во всяком случае так считается). Посему тоже чревато появлением глупого совета "....Обратитесь к разработчику", видите ли...
            Согласен Vovochka. Убери нафиг из конструктора присваивание и вынеси инициализацию переменных в отдельный метод, например Init. К тому же, если ты рассчитываешь таким образом проинициализировать и производный классы, то у тебя ничего не получится - в конструкторе vtable не определена.
              Упс... Сенкс.
                Ну вот и ладушки...
                С Новым Годом!
                  2server_mouse:
                  ну, уж лучше так:
                  CSString::CSString():str(NULL),Allocate(0)
                  :CString("")
                  {
                  }
                  2Vovochka:
                  в предыдущем стандарте действительно указатель this == 0 в конструторе, если объект создавался в куче, но уже в драфте существующего стандарта такое поведение изменили, он указывает на базовый класс, кстати именно из-за этого нельзя вызывать виртуальные функции в конструкторе, отработают функции базового класса, не дай Бог чисто виртуальные :).
                    2Valery
                    И дальше так: ???
                    CSString::CSString(char* buf)
                    {
                    this*="";
                    }
                    :)))
                    Шутка. Я понял.
                      Бог мой, с какого перепоя я мог такой бред написать? :) И с чего это я вдруг в конструкторе this на базовый класс тыкнул?
                      Перепутал с vtbl.
                      Всем, кого я мог ввести в заблуждение этим - сорри.
                        vtbl при этом, конечно тоже не на базовый класс указывает, ну, вы поняли... :)))
                          "он указывает на базовый класс..." Так ведь Новый Год, однако...
                            блин, я ж сам свой угарный бред поправил, чего ради еще раз носом тыкать?
                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                            0 пользователей:


                            Рейтинг@Mail.ru
                            [ Script execution time: 0,0282 ]   [ 16 queries used ]   [ Generated: 28.04.24, 18:23 GMT ]