2015-05-22 7 views
0

Я чувствую себя глупо, спрашивая об этом, но я отлаживал это, насколько я могу. Я добавляю два целых числа вместе и получаю не детерминированные случайные буквы в качестве вывода. Любая идея, что происходит?Добавление двух целых чисел в отладчик дает неожиданный вывод

enter image description hereenter image description here

+3

Пожалуйста, внесите свой код, а не только его фотографии. – Timo

+1

Ну. Фотографии кода будут лучше, чем изображения консоли :-) – Fogmeister

+0

Консоль показывает, что добавление двух целых чисел не дает ожидаемого результата. Это все, что нужно было, чтобы показать, что я должен использовать e вместо po – davis

ответ

1

ро стоит для объекта печати, поэтому он может создать указатель. Попробуйте вместо этого:

+0

Или используйте команду 'p' вместо' po'. – rmaddy

0

po по праву должен просто отказаться печатать что-либо, что не является указателем на объект, но по многочисленным просьбам мы заставили его распечатать значение результата выражения, если выражение не привело к созданию объекта указатель. Я думаю, что люди просто привыкли использовать «по» все время ...

Это несколько удобно, но сбивает с толку, потому что если число, которое вы хотели «po», также было указателем на объект, тогда вы бы см. описание объекта, а не номер.

До тех пор, пока единственными объектами являются законные значения указателя ObjC, эта путаница не имела большого значения, потому что указатели находятся в странных местах в памяти и не являются номерами, которые вы хотели бы в обычном ходу вещей. Но некоторое время назад ObjC добавил «помеченные указатели» - объекты ObjectiveC, содержимое которых (маленькие строки, малые целые числа и т. Д.) Действительно вписываются в указатель. Они крадут младшие биты, чтобы они выглядели как незаконный указатель, затем Остальная часть номера - это тип &. Это очень здорово по многим причинам, но это делает эту проблему еще хуже, потому что теперь существует гораздо больший класс целых чисел, похожий на экземпляры объектов.

Вынос как раз так, как указано выше, не используйте «po» для печати вещей, которые не являются объектами.