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

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

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

Студворк — интернет-сервис помощи студентам
Есть у кого то парочка тем для размышления каких то конструкций, где вроде бы так делать нельзя, но почему то работает или не работает!?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.01.2014, 17:31
Ответы с готовыми решениями:

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

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

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

57
Модератор
Эксперт С++
 Аватар для zss
13799 / 10990 / 6493
Регистрация: 18.12.2011
Сообщений: 29,290
30.01.2014, 10:02
Студворк — интернет-сервис помощи студентам
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
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
30.01.2014, 10:06
zss, по просьбе автора давайте ответы будут под спойлером.
Чтобы ответ был полным
Чтобы ответ был полным, тут еще было бы неплохо объяснить почему строка из 4 символов не помещается в массив char[4] и почему значение num изменяется именно на единицу.


PS На всякий: не сомневаюсь, что Вы и так это все понимаете.
1
Модератор
Эксперт С++
 Аватар для zss
13799 / 10990 / 6493
Регистрация: 18.12.2011
Сообщений: 29,290
30.01.2014, 10:15
Цитата Сообщение от 0x10 Посмотреть сообщение
было бы неплохо объяснить почему строка из 4 символов не помещается в массив char[4] и почему значение num изменяется именно на единицу
Давайте пока не будем открывать эту тайну.
Я думаю, что интересно самостоятельно додуматься.
Кто не сможет, попробуйте записать не 1025, а 1026, 1027,... 1023,1022
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
30.01.2014, 10:40
zss,
Цитата Сообщение от zss Посмотреть сообщение
char str[6];
Цитата Сообщение от zss Посмотреть сообщение
char str[4]; не хватает для записи строки
переведи
Кликните здесь для просмотра всего текста
а если будет str[6] то может и не затереть
если компилятор выравняет структуру то фактически под str будет 8 байт( 2 запасных байта под выравнивание)
0
 Аватар для Хулиган
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
30.01.2014, 11:46  [ТС]
Цитата Сообщение от RussDragon Посмотреть сообщение
Как я помню, Смартопоинтеры появились раньше C++11, но часть их ввели именно в нем.
я написал за те которые появились в новом стандарте
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
01.02.2014, 17:29
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
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
01.02.2014, 17:55
ValeryS, а в чем проблема? На стеке же выделяются, ну выделили мы 3 int на стеке, затем (вышли из функции) вернулись на 3*sizeof(int) в стеке обратно, а затем (зашли в функцию fnc2()) - опять создали 3 int, в которых и записаны те значения.
Разве нет?
0
Модератор
Эксперт С++
 Аватар для zss
13799 / 10990 / 6493
Регистрация: 18.12.2011
Сообщений: 29,290
01.02.2014, 17:59
Цитата Сообщение от ValeryS Посмотреть сообщение
VS2008 в release с выключенной оптимизацией
выдает
5 10 15
Срабатывает только для .c
а для .cpp нет
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
01.02.2014, 18:06
nexen,
а теперь включи оптимизацию
или используй дебиг режим)
я использовал кучу онлайн компиляторов
и только этот показал похожий результат
можешь объяснить почему?

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

Добавлено через 1 минуту
zss,
повторяю: Релизная версия и оптимизация выключена
1
Студент
 Аватар для MickeyBlueEyes
121 / 132 / 39
Регистрация: 07.04.2011
Сообщений: 503
01.02.2014, 18:07
> a=++b=++c=5;
В чём может заключаться магия?
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
01.02.2014, 18:26
Цитата Сообщение от MickeyBlueEyes Посмотреть сообщение
В чём может заключаться магия?
вот здесь описано
http://alenacpp.blogspot.ru/20... oints.html
точки следования

Добавлено через 16 минут
Цитата Сообщение от ValeryS Посмотреть сообщение
и только этот показал похожий результат
ой а ссылку то я не вставил
http://www.compileonline.com/c... online.php
1
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
02.02.2014, 01:31
ValeryS,
Кликните здесь для просмотра всего текста
Переменные записываются в те же ячейки памяти. Кстати, ни вызов функции, ни названия переменных роли не играют.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21286 / 8311 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
02.02.2014, 18:02
Цитата Сообщение от Kastaneda Посмотреть сообщение
классика жанра
C++
1
std::cout << 0["Hello"] << std::endl;
Ну и немного более сложное:

C
#include <stdio.h>
 
int a[10][20];
 
int main (void)
{
  5[6[a]] = 1;
  return 0;
}
Добавлено через 1 минуту
Пример исходников, которые ведут себя по разному, если их компилировать в режимах Си и Си++
https://www.cyberforum.ru/cpp-... post889587
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
05.02.2014, 08:34
MrGluck,
а вот не всегда
вызывающая функция может стек почистить после второго вызова и в результате каша
разные компиляторы ведут себя по разному
я правда не пробовал с stdcall, когда стек чистит вызываемая функция
в любом случае это "грязный хак"
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21286 / 8311 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
05.02.2014, 09:25
Что делает данный код и зачем такое кому-нибудь может понадобиться?
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
05.02.2014, 13:12
Цитата Сообщение от ValeryS Посмотреть сообщение
а вот не всегда
вызывающая функция может стек почистить после второго вызова и в результате каша
разные компиляторы ведут себя по разному
не важно кто чистит стек (вызываемая / вызывающая), после вызова ф-ции стек должен быть в состоянии как до ее вызова. Поэтому вызов ф-ции здесь действительно не при чем. Разные результаты на разных компиляторах / уровнях оптимизации объясняются отличием в конечном коде. Вызов ф-ций может быть вообще исключен и все будет посчитано на регистрах.
0
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
05.02.2014, 13:34
Пока все примеры выше очень даже обьяснимы, но не факт.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
05.02.2014, 14:15
Цитата Сообщение от Kastaneda Посмотреть сообщение
не важно кто чистит стек (вызываемая / вызывающая), после вызова ф-ции стек должен быть в состоянии как до ее вызова.
да это я увлекся
с аргументами попутал
Цитата Сообщение от Kastaneda Посмотреть сообщение
Поэтому вызов ф-ции здесь действительно не при чем.
очень даже причем
без вызова функции и выделения формальных переменных, мы не можем сдвинуть указатель стека
напрямую с указателем стека Си не работает, даже на уровне ассемблерных вставок( хотя может сейчас может, но раньше обращение к SP блокировалось)
Цитата Сообщение от Kastaneda Посмотреть сообщение
Разные результаты на разных компиляторах / уровнях оптимизации объясняются отличием в конечном коде.
Ну с этим то никто не спорит
Было б странно, если при одном и том же коде( бинарном), были бы разные результаты
"Но одна мысль, одна мысль, тревожит меня"(с) В Каверин "Два капитана"
Qt Cteator выдает такой ответ
15 4199990 5
т.е первый и последний правильно, средний мусор
Что он там со стеком делает?
в ассемблерный листинг не залазил
0
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
06.02.2014, 13:45
Вот пример, обьяснимый, но не факт
C++
#include <iostream>
#include <list>
 
int main ()
{
    int a[] = {1,2,3};
 
    std::list<int>mylist(&a[0], &a[3]); // a[3] ?
 
    for (std::list<int>::const_iterator it = mylist.begin(); it != mylist.end(); ++it)
        std::cout << ' ' << *it;
}
Добавлено через 12 минут
интересно что будет если у меня только три байта доступной памяти в системе)

Добавлено через 1 минуту
не 3, а 12
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
06.02.2014, 14:00
programina,
Кликните здесь для просмотра всего текста
так end() же возвращает указатель на элемент следующий за последним элементом, а не на последний. Следовательно все верно.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.02.2014, 14:00

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru