Модераторы: 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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.1145 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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