Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.89/19: Рейтинг темы: голосов - 19, средняя оценка - 4.89
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
1

Нужен пример того, что работать вроде не должно, но работает

29.01.2014, 17:31. Показов 3749. Ответов 57
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть у кого то парочка тем для размышления каких то конструкций, где вроде бы так делать нельзя, но почему то работает или не работает!?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.01.2014, 17:31
Ответы с готовыми решениями:

Посмотрите пожалуйста программу ,вроде все должно работать ,но что-то не так
#include <iostream> using namespace std; int main() { int a,b,c,i,z; c=0; cout<< "enter...

Не выводит новое окно, все вроде бы должно работать но не работает
Помогите пожалуйста найти ошибку <HTML> <HEAD> <META http-equiv="Content-Type"...

Нужен компаратор или что то вроде того
Код программы у меня очень маленький: String s = File.ReadAllLines("1.txt", Encoding.Default); ...

Транспонирование матриц. Вроде должно все работать, а не выходит
задание:Если максимальный элемент квадратной матрицы находится выше главной диагонали,...

57
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
06.02.2014, 14:17 41
Author24 — интернет-сервис помощи студентам
programina,
C++11 5.7
When an expression that has integral type is added to or subtracted from a pointer, the result has the type of the pointer operand. If the pointer operand points to an element of an array object, and the array is large enough, the result points to an element offset from the original element such that the difference of the subscripts of the resulting and original array elements equals the integral expression. In other words, if the expression P points to the i-th element of an array object, the expressions (P)+N (equivalently, N+(P)) and (P)-N (where N has the value n) point to, respectively, the i + n-th and i − n-th elements of the array object, provided they exist. Moreover, if the expression P points to the last element of an array object, the expression (P)+1 points one past the last element of the array object, and if the expression Q points one past the last element of an array object, the expression (Q)-1 points to the last element of the array object. If both the pointer operand and the result point to elements of the same array object, or one past the last element of the array object, the evaluation shall not produce an overflow; otherwise, the behavior is undefined.
1
2062 / 618 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
06.02.2014, 14:55 42
Somebody, ниче не понятно. То есть если всего памяти, например 10 байт, и взять адрес несуществующего 11-го байта, то ошибки не будет?
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
06.02.2014, 15:06 43
Цитата Сообщение от programina Посмотреть сообщение
То есть если всего памяти, например 10 байт, и взять адрес несуществующего 11-го байта, то ошибки не будет?
На низком уровне адрес - это же просто число. Даже если будет переполнение, хуже от этого не станет.
В C++ по стандарту место после конца массива должно быть адресуемое.
1
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
06.02.2014, 15:14 44
programina,
Кликните здесь для просмотра всего текста
&a[3]
==
a + 3
То бишь так и выходит: std::list<int>mylist(a, a + 3);

?
1
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
06.02.2014, 15:32 45
Цитата Сообщение от programina Посмотреть сообщение
и взять адрес несуществующего 11-го байта, то ошибки не будет?
Взять адрес можно. Но обращаться по нему нельзя. Можно только с этим адресом производить какие-то вычисления.

Если ты возьмёшь адрес 12-го элемента, то в реальности ошибки тоже не будет, но с точки зрения стандарта эта ситуация уже является неопределённой (в то время как для 11-го элемента по стандарту законно)
1
2062 / 618 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
06.02.2014, 15:36 46
да я о другом. Может так случиться, что памяти совсем мало, например свободная память на компе почти вся израсходована, и осталось только 10 байт?
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
06.02.2014, 15:44 47
Цитата Сообщение от programina Посмотреть сообщение
да я о другом. Может так случиться, что памяти совсем мало, например свободная память на компе почти вся израсходована, и осталось только 10 байт?
Допустим, может. Только от того, что 11-й байт находится как бы за пределом физически доступной памяти - ничего не означает. Допустим, у тебя в машине 1000 байт. Тебе ничего не мешает работать с указателем, значение которого равно 1001. Ты можешь его сравнивать, прибавлять, вычитать, но ты не можешь по нему обращаться в память
1
2062 / 618 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
06.02.2014, 15:48 48
Evg, сорри, круглое число полезных ответов испортила(на автомате плюсанула), но это то, что я хотела услышать, спасиб)
0
2062 / 618 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
23.03.2014, 17:30 49
C++
    if(dx >= 1,570796327) dx = 1,570796327;
Программа работала неадекватно. Оказалось, что у числа скопированного из калькулятора вместо точки запятая, а GCC даже ухом не повел.

зы: наверно в опциях нужно включить -Wall
0
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
23.03.2014, 18:07  [ТС] 50
C++
1
if(dx >= 1, "string") dx = 1,570796327;
что дает это запятая?

Добавлено через 1 минуту
т.е как можно применить запятую в if(... , ...)?
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
23.03.2014, 18:08 51
запятая это оператор и её даже можно перегрузить
1
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
23.03.2014, 18:10  [ТС] 52
действительно))
0
2062 / 618 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
23.03.2014, 20:23 53
Цитата Сообщение от Хулиган Посмотреть сообщение
что дает это запятая?
Дает сравнение переменной с числом, стоящим до запятой, а потом присваивает переменной число также стоящее перед запятой. Да, это именно запятая, я случайно скопировала ее вместе с числом из калькулятора. Удивило то, что компилятора не показал никаких ошибок или предупреждений (не были включены дополнительные опции компилятора). Нелепость обнаружилась, когда добавила в конец числа букву f - мол, это float.
0
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
23.03.2014, 20:47  [ТС] 54
Цитата Сообщение от programina Посмотреть сообщение
Дает сравнение переменной с числом, стоящим до запятой, а потом присваивает переменной число также стоящее перед запятой.
сравнение в числом до запятой работает не верно! результат сравнения всегда true
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
23.03.2014, 21:17 55
Цитата Сообщение от Хулиган Посмотреть сообщение
результат сравнения всегда true
ну я думаю не всегда, а когда после запятой число не равное 0
Цитата Сообщение от programina Посмотреть сообщение
if(dx >= 1,570796327)
сначала сравнивается с 1
а потом 570796327 приводится к bool в данном случае true
а так должно быть всегда ложь(false)
C++
1
if(dx>=1,0)
но не проверял, так мысли вслух
1
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
24.03.2014, 13:12 56
Цитата Сообщение от Убежденный Посмотреть сообщение
А деструктор-то не виртуальный !
C boost::shared_ptr, кстати, то же самое.
А он и не должен перекрываться.

Добавлено через 4 минуты
Цитата Сообщение от Убежденный Посмотреть сообщение
> 1
А где остальное ?
Так и должно быть. Ведь только обычная переменная-массив - это отдельная составная сущность, ассоциированная с указателем, но знающая о количестве своих элементов, а массив-параметр с пустыми скобками - просто указатель. Потому и передаётся размер массива отдельным параметром. Если сразу в заголовке функции декларировать размер, тогда другое дело, тогда функуция будет знать размер массива, но он будет константным.
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
24.03.2014, 13:27 57
Цитата Сообщение от taras atavin Посмотреть сообщение
А он и не должен перекрываться.
Когда первый раз сталкиваешься с использованием shared_ptr на
полиморфных классах, у которых отсутствует виртуальный деструктор,
это поведение немного удивляет. Лично меня удивило, хотя после,
когда я полез в исходники, все стало на свои места.

Цитата Сообщение от taras atavin Посмотреть сообщение
Если сразу в заголовке функции декларировать размер, тогда другое дело, тогда функуция будет знать размер массива...
Не будет:

http://codepad.org/bOPKPoXQ
http://ideone.com/Lk7RMr

> 1
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
24.03.2014, 13:41 58
Странно, но на
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
using namespace std;
 
void show_array(int Arr[10])
{
    int const Size = sizeof (Arr) / sizeof (Arr[0]);
 
    for (int i = 0; i < Size; ++i)
    {
        cout << Arr[i] << endl;
    }
}
 
 
 
int main()
{
    int Array[20] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
    show_array(Array);
    return 0;
}
компил даже не ругается.

Добавлено через 45 секунд
Похоже это тоже просто указатель.

Добавлено через 2 минуты
Вывел на экран sizeof параметра типа массив из десяти чаров, это оказался размер указателя.
0
24.03.2014, 13:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.03.2014, 13:41
Помогаю со студенческими работами здесь

Геометрический алгоритм.....что то вроде того
Два отрезка на плоскости заданные целочисельными координатами своих концов в декартовой системе...

генерация контента (или что-то вроде того)
привет :) сейчас буду излагать крайне сумбурно: проблема. есть бесплатный хостинг. narod....

Посоветуйте какой-либо задачник или что-то вроде того, для усваивания
Начал потихоньку читать &quot;Полное руководство С#4.0&quot;. Но материал с трудом усваивается. Посоветуйте...

Как работать с графикой DevC++. Нужен пример
Помогите, как поключить граф. драйвера, жду не дождусь когда уже начну работу с графикой. Скиньте...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
58
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru