Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Danissimo2308
0 / 0 / 0
Регистрация: 27.04.2015
Сообщений: 2
1

Динамическое выделение памяти под строки

22.03.2017, 14:14. Просмотров 333. Ответов 2
Метки нет (Все метки)

Доброго времени суток.

Изучаю основы C++, дошел до раздела "указатели и динамическое выделение памяти".
Имеется код, в котором демонстрируется принцип работы с указателями на указатели:

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include "stdafx.h"
#include <iostream>;
#include <string.h>;
 
using namespace std;
 
char **AddPtr (char **pp, int size, char *str);
 
int main()
{
    setlocale(LC_ALL, "rus");  
 
    int size = 0;
    char **pp = 0;
 
    cout << "~~~~~Добавляем указатели на пять строк и заполняем строки данными~~~~~" << endl;
 
    pp = AddPtr(pp, size, "11111111111111111");
    size++; 
 
    pp = AddPtr(pp, size, "22222222222222222");
    size++;  
 
    pp = AddPtr(pp, size, "33333333333333333");
    size++;  
 
    pp = AddPtr(pp, size, "44444444444444444");
    size++;  
 
    pp = AddPtr(pp, size, "55555555555555555");
    size++; 
 
    for(int i = 0; i < size; i++)   
        cout << pp[i] << endl;  
    cout << endl;
 
      for(int i = 0; i < size; i++) 
    {
        delete [] pp[i]; 
    }
    delete [] pp; 
    system("pause");
    return 0;
}
 
char **AddPtr (char **pp, int size, char *str)
{
    if(size == 0){
        pp = new char *[size+1]; 
    }
    else{   
        char **copy = new char* [size+1];
        for(int i = 0; i < size; i++) 
        {
            copy[i] = pp[i];
        }  
       
 
        delete [] pp; 
 
        pp = copy;
    }
 
    pp[size] = new char [strlen(str) + 1]; 
    strcpy_s(pp[size], strlen(str) + 1, str);  
 
    return pp;
}
Запустил с отладчиком, стал отслеживать, по каким адресам хранятся строки 111111…., 2222222….. и т.д. Для первой строки адрес был 0х00be2ce0, для второй — 0х00be2d30. При вычитании из второго адреса первого в hex-системе счисления получаем 50, в десятичной — 80. В каждой строке по 17 символов. Логику не понимаю. На каждый символ char выделяется 1 байт, вроде.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2017, 14:14
Ответы с готовыми решениями:

Динамическое выделение памяти под строки в стиле Си
В программе пользователь вводит строку неизвестного заранее размера. Ее нужно передать в функцию...

Динамическое выделение памяти под объект
Здравствуйте, меня интересует несколько вопросов по поводу конструкции new. Есть такой код: ...

Динамическое выделение памяти под массив
Доброго времени суток. Как реализовать динамическое выделение памяти под массив, к примеру размера...

Динамическое выделение памяти под массив
Я хочу функцию использовать пару раз, количество команд будет уменьшаться, и &quot;n&quot; надо менять. Как...

Динамическое выделение памяти под объекты
Создать класс с именем TRAIN, содержащий следующие закрытые поля: • название пункта назначения;...

2
Croessmah
++Ͻ
15306 / 8681 / 1657
Регистрация: 27.09.2012
Сообщений: 21,401
Записей в блоге: 2
Завершенные тесты: 1
22.03.2017, 14:25 2
Цитата Сообщение от Danissimo2308 Посмотреть сообщение
При вычитании из второго адреса первого
Два последовательных вызова new не обязаны давать последовательный участок памяти.
То бишь адрес первой строки может получиться "больше" адреса второй.


P.S. И вообще код какой-то странный.
1
Danissimo2308
0 / 0 / 0
Регистрация: 27.04.2015
Сообщений: 2
23.03.2017, 10:38  [ТС] 3
P.S. И вообще код какой-то странный.
Нашёл лишь это, не знаю, как пример кода для этой темы в идеале должен выглядеть
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2017, 10:38

Динамическое выделение памяти под структуру
#include &lt;iostream&gt; using namespace std; struct person { char*name; char *adres; int age; };...

Динамическое выделение памяти под двумерный массив
Здравствуйте. Как мне правильно и грамотно (!) выделять память под двумерные массивы? Откуда...

Динамическое выделение памяти под двумерный массив
1) Ввести построчно элементы двумерного массива чисел. Количество столбцов задается. Количество...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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