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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> sizeof("123456")= ? интересный баг 
V
    Опции темы
jonie
Дата 15.3.2008, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



простой вопрос: что будет на консоли ?
Код

    int a = sizeof("123456789")+1;
    printf("%d\n", a);


вопрос сложнее : что покажет дебаггер VS2005\VS2008 ?
user posted image

вопрос самый сложный : почему и как должно быть ?)  (я уже начал сомневаться в майкрософт)....




--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Alek86
Дата 15.3.2008, 14:49 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(jonie @  15.3.2008,  14:36 Найти цитируемый пост)
простой вопрос: что будет на консоли ?

11 будет

расшифровую - sizeof статического массива == колво элементов * размер элементов

а строка "123456789" содержит 10 элементов (+ '\0')


--------------------
user posted image    user posted image
PM MAIL   Вверх
vadiml
Дата 15.3.2008, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



sizeof("123456789")+1

нормальный компилятор должен дать 11

а что такого появилось в VC, а то я им с 6й версии не пользовался
PM MAIL Jabber   Вверх
Fin
Дата 15.3.2008, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


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

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



 9 символьных знаков + нуль-терминал + 1 итого 11. 
Скорее всего дебагер считает размер ссылки на строку, которая и есть 4 байта.


--------------------
Пролетал мимо.
PM MAIL   Вверх
jonie
Дата 15.3.2008, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Alek86 ну это был простой вопрос) а вот отладчик (См. скриншет) так не считает )) это баг или фича ? <- этот вопрос интереснее.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Alek86
Дата 15.3.2008, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



ты бы выделил...
дурной отладчик, значит


--------------------
user posted image    user posted image
PM MAIL   Вверх
vinter
Дата 15.3.2008, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

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



дебагер 2008 покажет 11


--------------------
Мой блог
PM MAIL WWW   Вверх
jonie
Дата 15.3.2008, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



а скриншет выше с какой по-твоему сделан ?
Код

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5

Installed Edition: Enterprise

Microsoft Visual Basic 2008   91899-270-4240882-60012
Microsoft Visual Basic 2008

Microsoft Visual C# 2008   91899-270-4240882-60012
Microsoft Visual C# 2008

Microsoft Visual C++ 2008   91899-270-4240882-60012
Microsoft Visual C++ 2008

Microsoft Visual Studio 2008 Tools for Office   91899-270-4240882-60012
Microsoft Visual Studio 2008 Tools for Office

Microsoft Visual Studio Team System 2008 Architecture Edition   91899-270-4240882-60012
Microsoft Visual Studio Team System 2008 Architecture Edition

Microsoft Visual Studio Team System 2008 Database Edition   91899-270-4240882-60012
Microsoft Visual Studio Team System 2008 Database Edition

Microsoft Visual Studio Team System 2008 Development Edition   91899-270-4240882-60012
Microsoft Visual Studio Team System 2008 Development Edition

Portions of International CorrectSpell™ spelling correction system © 1993 by Lernout & Hauspie Speech Products N.V.  All rights reserved.

The American Heritage® Dictionary of the English Language, Third Edition Copyright © 1992 Houghton Mifflin Company.  Electronic version licensed from Lernout & Hauspie Speech Products N.V.  All rights reserved.


Microsoft Visual Studio Team System 2008 Test Edition   91899-270-4240882-60012
Microsoft Visual Studio Team System 2008 Test Edition

Microsoft Visual Web Developer 2008   91899-270-4240882-60012
Microsoft Visual Web Developer 2008

Crystal Reports    AAJ60-G0MSA4K-68000CF
Crystal Reports Basic for Visual Studio 2008


Hotfix for Microsoft Visual Studio Team System 2008 Team Suite - ENU (KB944899)   KB944899
This hotfix is for Microsoft Visual Studio Team System 2008 Team Suite - ENU.
If you later install a more recent service pack, this hotfix will be uninstalled automatically.
For more information, visit http://support.microsoft.com/kb/944899.

Hotfix for Microsoft Visual Studio Team System 2008 Team Suite - ENU (KB945282)   KB945282
This hotfix is for Microsoft Visual Studio Team System 2008 Team Suite - ENU.
If you later install a more recent service pack, this hotfix will be uninstalled automatically.
For more information, visit http://support.microsoft.com/kb/945282.

Hotfix for Microsoft Visual Studio Team System 2008 Team Suite - ENU (KB946040)   KB946040
This hotfix is for Microsoft Visual Studio Team System 2008 Team Suite - ENU.
If you later install a more recent service pack, this hotfix will be uninstalled automatically.
For more information, visit http://support.microsoft.com/kb/946040.

Hotfix for Microsoft Visual Studio Team System 2008 Team Suite - ENU (KB946308)   KB946308
This hotfix is for Microsoft Visual Studio Team System 2008 Team Suite - ENU.
If you later install a more recent service pack, this hotfix will be uninstalled automatically.
For more information, visit http://support.microsoft.com/kb/946308.

Hotfix for Microsoft Visual Studio Team System 2008 Team Suite - ENU (KB946344)   KB946344
This hotfix is for Microsoft Visual Studio Team System 2008 Team Suite - ENU.
If you later install a more recent service pack, this hotfix will be uninstalled automatically.
For more information, visit http://support.microsoft.com/kb/946344.

Hotfix for Microsoft Visual Studio Team System 2008 Team Suite - ENU (KB946581)   KB946581
This hotfix is for Microsoft Visual Studio Team System 2008 Team Suite - ENU.
If you later install a more recent service pack, this hotfix will be uninstalled automatically.
For more information, visit http://support.microsoft.com/kb/946581.

Hotfix for Microsoft Visual Studio Team System 2008 Team Suite - ENU (KB947171)   KB947171
This hotfix is for Microsoft Visual Studio Team System 2008 Team Suite - ENU.
If you later install a more recent service pack, this hotfix will be uninstalled automatically.
For more information, visit http://support.microsoft.com/kb/947171.

Hotfix for Microsoft Visual Studio Team System 2008 Team Suite - ENU (KB947173)   KB947173
This hotfix is for Microsoft Visual Studio Team System 2008 Team Suite - ENU.
If you later install a more recent service pack, this hotfix will be uninstalled automatically.
For more information, visit http://support.microsoft.com/kb/947173.

Hotfix for Microsoft Visual Studio Team System 2008 Team Suite - ENU (KB947789)   KB947789
This hotfix is for Microsoft Visual Studio Team System 2008 Team Suite - ENU.
If you later install a more recent service pack, this hotfix will be uninstalled automatically.
For more information, visit http://support.microsoft.com/kb/947789.

SourceOutliner   1.0
Creates a tool window that provides an outline view of a source code file.

Visual Assist X   
For more information about Visual Assist X, see the Whole Tomato Software website at http://www.WholeTomato.com. Copyright (c) 1997-2007 Whole Tomato Software, Inc.

Xoreax IncrediBuild   3.10 (build 822)
Xoreax IncrediBuild 3.10 (build 822)

вот конкретно с этой.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Alek86
Дата 15.3.2008, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



2005 тоже 4 показывает - можешь на мелких бочку накатить smile

кстати, тема ближе к ветке Visual C++/MFC/WTL и к чистым сям не относится...


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


Explorer
****


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

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



значит у тя кривая студия ;)
user posted image


--------------------
Мой блог
PM MAIL WWW   Вверх
korian
Дата 15.3.2008, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

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



причем тут студия
у него sizeof в watch'е
а переменную "123456789", можно рассматривать 2-я вариантами:
1) const char a[] = "123456789";
2) const char* b = "123456789";

т.к. первый вариант - это константа, имху смысла в watch'е он не имеет, имху поэтому выбирается второй вариант.
уверен, что sizeof(a) в watch'е, при первом варианте покажет 10.

Это сообщение отредактировал(а) korian - 15.3.2008, 21:43
PM   Вверх
vinter
Дата 15.3.2008, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

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



Цитата(korian @  15.3.2008,  22:41 Найти цитируемый пост)
причем тут студияу него sizeof в watch'еа переменную "123456789", можно рассматривать 2-я вариантами:1) const char a[] = "123456789";2) const char* b = "123456789";

поверь, ты не открыл Америку, только вот две одинаковые студии(разные издания) показывают по разному
Цитата(korian @  15.3.2008,  22:41 Найти цитируемый пост)
т.к. первый вариант - это константа, имху смысла в watch'е он не имеет, имху поэтому выбирается второй вариант.

это в любом случае константа, которая лежит в Text Segment(справедливо для студии)


--------------------
Мой блог
PM MAIL WWW   Вверх
jonie
Дата 15.3.2008, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



наверно я идиот, но не вижу на твоем скриншете в watch-ах ничего похожего на sizeof("21343242");
я не вижу "две одинаковые студии(разные издания) показывают по разному" этого


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
baldina
  Дата 15.3.2008, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Вычислятель в окошке watch имеет некоторые ограничения (большинство описано msdn), так что наивно от него ожидать некоторых вещей.
В частности, для "123456" watch покажет тип char* и значение 0x00000.
Это представляется логичным, т.к. эта строка не принадлежит отлаживаемой программе.

vinter, 
Цитата

это в любом случае константа, которая лежит в Text Segment(справедливо для студии) 

пошевели, в чьем Text Segment она лежит? и с какого момента? и причем тут студия?
Цитата

только вот две одинаковые студии(разные издания) показывают по разному

это какие? все мои одинаково. я чего-то пропустил?
PM MAIL   Вверх
vinter
Дата 15.3.2008, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

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



jonie, сорри это я ступил smile
првел пару экспериментов, так вот непонятно что в этом случае показывает дебагер, но это не размер указателя, так как при х64 сборке, он все равно остается 4..хотя другие указатели как положено, показываються размером в 8 байт.. Пусть будет глюк, он в принципе не существенный, т.к в реальной ситуации это никак не воспроизводится(чтобы помешать по крайней мере)

Добавлено через 7 минут и 49 секунд
Цитата(baldina @  15.3.2008,  23:57 Найти цитируемый пост)
пошевели

чем?
Цитата(baldina @  15.3.2008,  23:57 Найти цитируемый пост)
 в чьем Text Segment она лежит

в своем
Цитата(baldina @  15.3.2008,  23:57 Найти цитируемый пост)
 и причем тут студия?

разные компиляторы делают по разному, например Borland Builder 6.0 не помещает конст. строку в Text Segment


--------------------
Мой блог
PM MAIL WWW   Вверх
baldina
Дата 15.3.2008, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



не пошевелил :(. Text Segment здесь непричем, т.к. речь вообще не про компилятор, а про некоторую фичу в отладчике. А константы, что мы вводим в отладчике, не только не являеются частью программы, но и не являются статическими данными: мы их только что ввели, и отладчик (не программа!) распределил для них память динамически.

Добавлено через 6 минут и 4 секунды
Цитата
при х64 сборке

попробую телепатию. у тебя приложение получается 64-битное, а отладчик - 32х битный. Так вот он и показывает указатели приложения 8байт, а свои - 4.

Это сообщение отредактировал(а) baldina - 15.3.2008, 23:35
PM MAIL   Вверх
vinter
Дата 15.3.2008, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

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



Цитата(baldina @  16.3.2008,  00:35 Найти цитируемый пост)
Text Segment здесь непричем, т.к. речь вообще не про компилятор, а про некоторую фичу в отладчике

читай внимательнее, про TS я написал в ответе на конкретную цитату.
Цитата(baldina @  16.3.2008,  00:35 Найти цитируемый пост)
попробую телепатию. у тебя приложение получается 64-битное, а отладчик - 32х битный. Так вот он и показывает указатели приложения 8байт, а свои - 4.

это как? smile 
не я не спорю, может ты и прав. Где можно посмотреть скольки битный отладчик используется? хотя что-то я сильно сомневаюсь что 32 битным отладчиком, можно дебажить 64 разрядные приложения..


--------------------
Мой блог
PM MAIL WWW   Вверх
MAKCim
Дата 16.3.2008, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата(vinter @  15.3.2008,  23:50 Найти цитируемый пост)
хотя что-то я сильно сомневаюсь что 32 битным отладчиком, можно дебажить 64 разрядные приложения.. 

а в чем проблема?
то, что это несколько противоестественно - да
технических же проблем я не вижу
для реализации отладчика необходим дизассемблер и соответствующая поддержка в ядре ОС, нативная, либо в виде модуля (которая заключается прежде всего в реализации возможности чтения/записи данных из/в адресного пространства отладочного процесса и регистров)
32-х битный дизассемблер 64-х битного кода реализуется элементарно, потому что это логика, а любую логику можно эмулировать програмно в любом окружении (как пример, полная эмуляция 64-х битного режима в 32-х разрядном Bochs)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
jonie
Дата 16.3.2008, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



в общем считаем баг фичей.
самое фиговое, если подумать вовсе не watch-и... а то что всплывает при наведении на sizeof непосредственно (там тоже 4). Если вы используете сложные вычисления с использованием подобного кода и неуверены в них, то это может стать довольно немаленькой проблемой..... просто надо помнить и знать) ну и по возможности не использовать такой код 8))


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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