Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.94
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
#1

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

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

Есть у кого то парочка тем для размышления каких то конструкций, где вроде бы так делать нельзя, но почему то работает или не работает!?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2014, 17:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нужен пример того, что работать вроде не должно, но работает (C++):

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

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

Syntax error хотя вроде быть не должно - C++
Ругается на пропущенную ';' хотя она стоит. Output: 1>c:\android\project\proj.win32\gamescene.h(22): error C2146: syntax error :...

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

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

Геометрический алгоритм.....что то вроде того - C#
Два отрезка на плоскости заданные целочисельными координатами своих концов в декартовой системе координат. Определить, есть ли у них общая...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
30.01.2014, 01:01  [ТС] #16
в попытках разобраться в некоторых примерах нашел еще один:

C++
1
2
3
typedef int Foo;
int i = 42;
i.~Foo();
а так нельзя:
C++
1
2
int i = 42;
i.~int();
ответ еще не знаю

Добавлено через 23 минуты
афигеть....полез узнавать за умные указатели которые появились в С++11, а там столько всякой крутатени
аж настроение поднялось
0
Kastaneda
30.01.2014, 08:51
  #17

Не по теме:

Цитата Сообщение от castaway Посмотреть сообщение
Kastaneda, а где обсуждался последний вариант из 13-го поста? Поделись ссылкой.
Вот здесь, начиная со второго поста.

2
RussDragon
12 / 12 / 1
Регистрация: 08.04.2012
Сообщений: 81
30.01.2014, 08:59 #18
Цитата Сообщение от Хулиган Посмотреть сообщение
Добавлено через 23 минуты
афигеть....полез узнавать за умные указатели которые появились в С++11, а там столько всякой крутатени
аж настроение поднялось

Не по теме:

Как я помню, Смартопоинтеры появились раньше C++11, но часть их ввели именно в нем.

0
Croessmah
Эксперт CЭксперт С++
13226 / 7498 / 845
Регистрация: 27.09.2012
Сообщений: 18,416
Записей в блоге: 3
Завершенные тесты: 1
30.01.2014, 09:14 #19
Цитата Сообщение от Хулиган Посмотреть сообщение
ответ еще не знаю
достаточно посмотреть в Стандарт:
Нужен пример того, что работать вроде не должно, но работает

то же самое, например и с шаблонами:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template < typename T >
struct X {
   X () {
      x.~T() ;
   }
   int x ;
} ;
 
 
int main()
{
   X<int> x ;
}
псевдо-деструктор
1
Croessmah
Эксперт CЭксперт С++
13226 / 7498 / 845
Регистрация: 27.09.2012
Сообщений: 18,416
Записей в блоге: 3
Завершенные тесты: 1
30.01.2014, 09:19 #20
О псевдо-деструкторе:
Нужен пример того, что работать вроде не должно, но работает
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
30.01.2014, 10:02 #21
0x10, к посту номер 3.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
typedef struct
{
    char str[6];
    int num;
} NumberRepr;
void format(NumberRepr* number)
{
    sprintf(number->str, "%4d", number->num);
}
int main()
{
    NumberRepr number = {"",1025 };
    format(&number);
    printf("str: %s\n", number.str);
    printf("num: %d\n", number.num);
    return 0;
}
char str[4]; не хватает для записи строки
и она вылезает за пределы массива.
В результате портится переменная, которая лежит за строкой,
а это как раз num.
0
0x10
2464 / 1636 / 238
Регистрация: 24.11.2012
Сообщений: 4,031
30.01.2014, 10:06 #22
zss, по просьбе автора давайте ответы будут под спойлером.
Чтобы ответ был полным
Чтобы ответ был полным, тут еще было бы неплохо объяснить почему строка из 4 символов не помещается в массив char[4] и почему значение num изменяется именно на единицу.


PS На всякий: не сомневаюсь, что Вы и так это все понимаете.
1
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
30.01.2014, 10:15 #23
Цитата Сообщение от 0x10 Посмотреть сообщение
было бы неплохо объяснить почему строка из 4 символов не помещается в массив char[4] и почему значение num изменяется именно на единицу
Давайте пока не будем открывать эту тайну.
Я думаю, что интересно самостоятельно додуматься.
Кто не сможет, попробуйте записать не 1025, а 1026, 1027,... 1023,1022
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
30.01.2014, 10:40 #24
zss,
Цитата Сообщение от zss Посмотреть сообщение
char str[6];
Цитата Сообщение от zss Посмотреть сообщение
char str[4]; не хватает для записи строки
переведи
Кликните здесь для просмотра всего текста
а если будет str[6] то может и не затереть
если компилятор выравняет структуру то фактически под str будет 8 байт( 2 запасных байта под выравнивание)
0
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
30.01.2014, 11:46  [ТС] #25
Цитата Сообщение от RussDragon Посмотреть сообщение
Как я помню, Смартопоинтеры появились раньше C++11, но часть их ввели именно в нем.
я написал за те которые появились в новом стандарте
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
01.02.2014, 17:29 #26
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
 
int fnctst(int a,int b, int c)
{
    return a+b+c;
}
 
void  fnc1()
{
   int a=5;
   int b=10;
   int c=15;
 
   int m=fnctst(a,b,c);
}
void   fnc2()
{
int a,b,c;
printf("%d %d %d\n",a,b,c);
}
 
 
int main(int argc, char * argv [])
{
   fnc1();
   fnc2();
 
   return 0;
}
VS2008 в release с выключенной оптимизацией
выдает
5 10 15
0
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
01.02.2014, 17:55 #27
ValeryS, а в чем проблема? На стеке же выделяются, ну выделили мы 3 int на стеке, затем (вышли из функции) вернулись на 3*sizeof(int) в стеке обратно, а затем (зашли в функцию fnc2()) - опять создали 3 int, в которых и записаны те значения.
Разве нет?
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
01.02.2014, 17:59 #28
Цитата Сообщение от ValeryS Посмотреть сообщение
VS2008 в release с выключенной оптимизацией
выдает
5 10 15
Срабатывает только для .c
а для .cpp нет
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
01.02.2014, 18:06 #29
nexen,
а теперь включи оптимизацию
или используй дебиг режим)
я использовал кучу онлайн компиляторов
и только этот показал похожий результат
можешь объяснить почему?

ТС просил прятать ответы

Добавлено через 1 минуту
zss,
повторяю: Релизная версия и оптимизация выключена
1
MickeyBlueEyes
Студент
120 / 131 / 12
Регистрация: 07.04.2011
Сообщений: 503
01.02.2014, 18:07 #30
> a=++b=++c=5;
В чём может заключаться магия?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2014, 18:07
Привет! Вот еще темы с ответами:

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

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

Скажите как мне на KeyUp или что-нибудь вроде того обнулить значение нажатой клавиши - JavaScript
Скажите как мне на KeyUp или что-нибудь вроде того обнулить значение нажатой клавиши. Т.е. - объясняю. Надо, чтобы если я в инпуте ...

Вывести строку в обратном порядке с учетом того, что первое слово должно начинаться с большой буквы - C (СИ)
Вывести строку в обратном порядке с учетом того, что первое слово должно начинаться с большой буквы.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.02.2014, 18:07
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru