Модераторы: xvr

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка malloc(): memory coorruption, Прошу помочь разобраться в причинах 
V
    Опции темы
volatile
Дата 27.2.2011, 20:44 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Если не работает 
string s = input;

то не должен работать и 
= string( input );

в обоих случаях вызывается конструктор string( const char* )


это явно кривой компилер. У вас под линухом видимо это нармально, господа линуксоиды ??? smile 


PM MAIL   Вверх
Zerstroer
Дата 27.2.2011, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 8.8.2007
Где: Алма-Ата

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



*ловит камень летящий в огород*
Да самый лучший компилер! 
gpp/g++!
Это у вас неподлинуксом нормально когда
Цитата(volatile @  27.2.2011,  18:44 Найти цитируемый пост)
Если не работает string s = input;то не должен работать и = string( input );
!!!
А линукс система до крайностей адекватная!
Вот придёт borisbn и всё разъяснит!
Ладно, считаю дальнейшую палемику нежелательным флудом. smile 


--------------------
In silico
PM MAIL ICQ   Вверх
borisbn
Дата 27.2.2011, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



Цитата(Zerstroer @  27.2.2011,  19:38 Найти цитируемый пост)

Так, как вы сказали
string s = input; И всё.

точно нельзя! У меня input - указатель!


Цитата(Zerstroer @  27.2.2011,  19:38 Найти цитируемый пост)
Правильный ответ string s = string( input );

во всех компиляторах, которые я знаю, это - одно и то же !!!

Zerstroer, у тебя, скорее всего, какой-то ну очень древний компилятор...
тем более, что 
Цитата(Zerstroer @  27.2.2011,  20:11 Найти цитируемый пост)
у меня ругается компиллятор, input - не const char*, а просто char*.

по стандарту как раз обратное преобразование невозможно. а вот char * -> const char * - это не просто нормально, а супернормально.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
volatile
Дата 27.2.2011, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



string s = string( input );

здесь что происходит. сначала создается временный объект string, назовём его t
t = string( input );
потом создается объект s.
s (t);

а в строчке
string s = input;
никаких временных объектов не создается. и дело проходит за 1 шаг вместо 2-ух.


привет линуксоидам!!!
PM MAIL   Вверх
borisbn
Дата 27.2.2011, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



Цитата(volatile @  27.2.2011,  21:17 Найти цитируемый пост)
никаких временных объектов не создается. и дело проходит за 1 шаг вместо 2-ух

линухоидов тоже не люблю, но, думаю, что cl.exe, что gcc разберуться и тупо один раз вызовут конструктор для вновь создаваемого объекта. впрочем ничего не мешает проверить: включить компиляцию через ассемблер - и вперёд smile


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
volatile
Дата 27.2.2011, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



borisbn, да дело не в оптимизаторе.
почему в принципе нужно писать лишний код, и надеяться что оптимизатор это исправит?

PM MAIL   Вверх
borisbn
Дата 27.2.2011, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



Цитата(volatile @  27.2.2011,  21:30 Найти цитируемый пост)
почему в принципе нужно писать лишний код

лишний - не нужно, а писать понятнее для самого себя - обязательно! даже если знаешь, что оптимизатор не исправит



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
volatile
Дата 27.2.2011, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



borisbn, ну здесь не могу не согласиться.

Zerstroer, а вам все-же посоветую сменить компилер.
к линуксоидам, кстати, я нормально отношусь. 
smile 
PM MAIL   Вверх
bsa
Дата 27.2.2011, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(volatile @  27.2.2011,  20:44 Найти цитируемый пост)
 У вас под линухом видимо это нармально, господа линуксоиды ??

нет, это ненормально. У меня проблем с конвертацией char* в const char * никогда не было.

Цитата(volatile @  27.2.2011,  21:17 Найти цитируемый пост)
string s = string( input );

здесь что происходит. сначала создается временный объект string, назовём его t
t = string( input );
потом создается объект s.
s (t);

а в строчке
string s = input;
никаких временных объектов не создается. и дело проходит за 1 шаг вместо 2-ух.

Итак, есть два вида конструкторов.implicit и explicit. Все конструкторы по умолчанию implicit. Это значит, что код:
Код
string s = "sss";
//и
string s("sss");
Полностью идентичен - будет вызван один раз конструктор класса string.
Если бы конструктор string::string(const char *) был бы объявлен так: explicit string(const char *); то первый вариант просто бы не скомпилировался.
А вот код:
Код
string s = string("sss");
уже отличается от вышеприведенных. Так как в этом случае будет: вызов конструктора string::string(const char*), затем string::string(const string&) - конструктора копирования, и наконец деструктора string::~string().
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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