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

Как перевести строку в читабельный вид? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Перегрузка конструктора копирования и оператора присвоения http://www.cyberforum.ru/cpp-beginners/thread444377.html
Всем привет, сразу к делу. После прочтения 11 главы Лафоре столкнулся с такой бедой как понятие перегрузка оператора присвоения. Дело в том что Лафоре говорит что именно оператор присвоения является...
C++ Дальнейшее изучение С++ Вот хотел у вас спросить, что дальше можно почитать после Бьярне Страуструп Программирование: принципы и практика использования C++, и после Р.Лафоре ООП в С++, планирую купить по WinApi и что то еще... http://www.cyberforum.ru/cpp-beginners/thread444347.html
полноэкранный режим консоли C++
Здравствуйте! Не могли бы подсказать, как программно переходить в полноэкранный режим в консоле? (Именно переходить, а не получать информацию, является ли режим полноэранным) Добавлено через...
C++ Преобразовать выражение в постфиксную форму
Преобразовать выражение, составленное из цифр и знаков арифметических операций (+,-,*,/) в постфиксную форму. В постфиксной форме сначала записываются операнды, а затем знак операции. Обычная запись...
C++ Построить некоторый Автомат на три команды http://www.cyberforum.ru/cpp-beginners/thread444324.html
Некоторый автомат может запросить два числа и выполнить 3 команды. Команда А преобразует имеющуюся пару чисел (х, у) в (х-у,у), команда В преобразует пару чисел (х,у) в пару (х+у,у), команда С...
C++ Векторы Определите полусумму длин двух векторов А(1,5; 2,5; -0,3) и В(-11,7; -9,3; 2,5; 3,7; -1,2). Вычислите, длины вектора оформив в виде функции. подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
17805 / 6011 / 388
Регистрация: 30.03.2009
Сообщений: 16,524
Записей в блоге: 26
13.02.2012, 13:31
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Суть в следующем каждому неинициализированному 1-му сконца элементу вектора vec прилепливаем память субвектора add из 2-х элементов, таким образом в блоке vec расширяем на 1-ку конечный маркер использованой памяти, а тем временем "убиваем" наш субвектор add. В общем "обманываем систему - двигая маркер конца использованного блока)
Давай смоделируем твой поведение на коротеньком примере. Уж извини за исползование printf'а, но я никак не могу запомнить, как через cout в 16-ричном виде печатать

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
int main (void)
{
  char *lpw = new char[2];
  char *add;
  long nchr = 0;
 
  for (int i = 0; i < 100; i++)
    {
      lpw[nchr] = 0x80 + i;
      nchr++;
      add = new char[2];
      lpw[nchr] = add[0];
    }
 
  for (int i = 0; i < 100; i++)
    printf ("%02x ", (unsigned char) lpw[i]);
  printf ("\n");
 
  return 0;
}
При исполнении получим следующее и как бы тут всё нормально:

Код
80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 da db dc dd de df e0 e1 e2 e3
Теперь в код введём три новых указателя, для которых сделано динамическое выделение памяти, заполним их значениями, а в конце распечатаем:

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
30
31
32
33
34
35
#include <stdio.h>
 
int main (void)
{
  char *lpw = new char[2];
  char *add;
  long nchr = 0;
 
  int *pa = new int;
  *pa = 0x11111111;
  int *pb = new int;
  *pb = 0x22222222;
  int *pc = new int;
  *pc = 0x33333333;
 
  for (int i = 0; i < 100; i++)
    {
      lpw[nchr] = 0x80 + i;
      nchr++;
      add = new char[2];
      lpw[nchr] = add[0];
    }
 
#if 0
  for (int i = 0; i < 100; i++)
    printf ("%02x ", (unsigned char) lpw[i]);
  printf ("\n");
#endif
 
  printf ("*pa = 0x%x\n", *pa);
  printf ("*pb = 0x%x\n", *pb);
  printf ("*pc = 0x%x\n", *pc);
 
  return 0;
}
При исполнении получим:

Код
*pa = 0x93929190
*pb = 0xa3a2a1a0
*pc = 0xb3b2b1b0
Внимание вопрос! Почему значения, записанные по указателям pa, pb и pc испортились?

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
(в разделе экспертов рассматривали рассматривали и так никто и не привёл такой вариант выделения памяти)
Если правильно ответишь на предыдущий вопрос, то очевидным образом поймёшь, почему такой вариант никто не приводил
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru