С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 1
Регистрация: 15.12.2012
Сообщений: 19
1

Работа с массивами/указателями

15.04.2015, 16:19. Показов 462. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
я чего-то туплю, задача такая, надо в i строку двумерного массива записать ptr_buffer.
Вот код: но там получается, что во всех строчках одни и те же значения
C++
1
2
3
4
5
6
7
8
9
10
11
12
unsigned short int ** vrem = new unsigned short int*[frame_count];
    for (int i = 0; i < frame_count; i++)
    {
        vrem[i] = new unsigned short int[width*height];
    }
    for (int i = 0; i < frame_count; i++)
    {
        unsigned short int * ptr_buffer = new unsigned short int[width*height];
        rdr->GetFrame(FrameType::FT_16_BPP_GRAY, i, ptr_buffer, width*height * 2);
        vrem[i] = ptr_buffer;
        delete[] ptr_buffer;
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Блог
15.04.2015, 16:19
Ответы с готовыми решениями:

Работа с массивами, указателями и функциями.
Я вот рли не знаю, как отправить в свою созданную функцию массив, как потом обработанный массив в...

Работа с указателями/массивами /функциями
Запутался с указателями/в лабе нужно провести через указатели /Дан одномерный массив из К...

По. разобрать программу с указателями и массивами ( авторы Либерти, Дмитрий )
Программа В строках 26, 28 мы создаем массивы? С помощю getline мы вводим строку. И о...

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

7
4264 / 3323 / 925
Регистрация: 25.03.2012
Сообщений: 12,520
Записей в блоге: 1
15.04.2015, 16:24 2
код бред
Цитата Сообщение от zorra1234 Посмотреть сообщение
vrem[i] = ptr_buffer;
delete[] ptr_buffer;
тут нужно поэлементное копирование, а не присвоение
C++
1
2
3
for (int j=0; j<width*height; j++)
  vrem[i][j] = ptr_buffer[j]; 
delete[] ptr_buffer;
1
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
15.04.2015, 16:29 3
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
тут нужно поэлементное копирование, а не присвоение
Не обязательно. Освободить память под vrem[i] и присвоить новое значение (ptr_buffer).

Добавлено через 48 секунд
Цитата Сообщение от zorra1234 Посмотреть сообщение
задача такая, надо в i строку двумерного массива записать ptr_buffer.
Цикл тогда зачем?
0
0 / 0 / 1
Регистрация: 15.12.2012
Сообщений: 19
15.04.2015, 16:30  [ТС] 4
Цитата Сообщение от lss Посмотреть сообщение
Освободить память под vrem[i]
не понял вас, я же ее выделял, разве она не свободна?
0
4264 / 3323 / 925
Регистрация: 25.03.2012
Сообщений: 12,520
Записей в блоге: 1
15.04.2015, 16:35 5
Цитата Сообщение от lss Посмотреть сообщение
Не обязательно. Освободить память под vrem[i] и присвоить новое значение (ptr_buffer).
шо блин?
vrem[i] = ptr_buffer; это уже как минимум гарантированная утечка памяти, выделенной в строке 4
за ним следует
delete[] ptr_buffer; это уже делает невалидной предыдущую операцию, т.к. с этого момента vrem[i] не указывает ни на память изначально выделенную, ни на присвоенные ей данные.

Добавлено через 33 секунды
Цитата Сообщение от zorra1234 Посмотреть сообщение
не понял вас, я же ее выделял, разве она не свободна?
а его и не надо понимать

Добавлено через 2 минуты
Цитата Сообщение от zorra1234 Посмотреть сообщение
я же ее выделял, разве она не свободна?
то что ты выделял, потерялось после vrem[i] = ptr_buffer;
был указатель, в строке 4 указывал на одно, ты его "развернул в противоположную сторону" и теперь он указывает на память, выдел. в строке 8
а результат действий в строке 4 бесполезно потерялся из-за такого необдуманного действия.
1
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
15.04.2015, 16:37 6
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
шо блин?
vrem[i] = ptr_buffer; это уже как минимум гарантированная утечка памяти, выделенной в строке 4
Читай, что пишу:
Цитата Сообщение от lss Посмотреть сообщение
Освободить память под vrem[i]
C++
1
2
3
4
5
6
7
8
9
10
    unsigned short int ** vrem = new unsigned short int*[frame_count];
    for (int i = 0; i < frame_count; i++)
    {
        vrem[i] = new unsigned short int[width*height];
    }
    
    unsigned short int * ptr_buffer = new unsigned short int[width*height];
    //...
    delete [] vrem[3];
    vrem[3] = ptr_buffer;
0
0 / 0 / 1
Регистрация: 15.12.2012
Сообщений: 19
15.04.2015, 16:38  [ТС] 7
Kuzia domovenok, да я примерно так и подумал уже) просто в свое время, говорили, что указатели и массивы это одно и то же, нее могу отвыкнуть от этой фразы...
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
15.04.2015, 16:59 8
Для примера:
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
int main()
{
    int frame_count = 5;
    int width = 3;
    int height = 4;
    unsigned short int ** vrem = new unsigned short int*[frame_count];
    for (int i = 0; i < frame_count; i++)
    {
        vrem[i] = new unsigned short int[width*height];
    }
 
    for (int i = 0; i < frame_count; ++i)
        for (int j = 0; j < width * height; ++j)
            vrem[i][j] = 1;
 
    for (int i = 0; i < frame_count; ++i)
    {
        for (int j = 0; j < width * height; ++j)
            cout << vrem[i][j] << ' ';
        cout << endl;
    }
    cout << endl << endl;
 
    unsigned short int * ptr_buffer = new unsigned short int[width * height];
    for (int i = 0; i < width * height; ++i)
        ptr_buffer[i] = 2;
    
    delete [] vrem[3];
    vrem[3] = ptr_buffer;
 
    for (int i = 0; i < frame_count; ++i)
    {
        for (int j = 0; j < width * height; ++j)
            cout << vrem[i][j] << ' ';
        cout << endl;
    }
 
    for (int i = 0; i < frame_count; ++i)
        delete [] vrem[i];
    delete [] vrem;
    
    system("pause");
    return 0;
}
Миниатюры
Работа с массивами/указателями  
0
15.04.2015, 16:59
cpp_developer
Эксперт
20123 / 5690 / 417
Регистрация: 09.04.2010
Сообщений: 12,546
Блог
15.04.2015, 16:59
Помогаю со студенческими работами здесь

Особенности и порядок работы с указателями, обмен данными между динамическими массивами
Написать программу обмена данными между двумя динамическими массивами,как можно проще. Заранее...

Объясните правила работы с delete с указателями и массивами (корректное освобождение выделенной памяти)
Указатель содержал ссылку на динамический массив. Массив удалил. Имеет ли смысл применять delete на...

работа с указателями
Вспоминаю с++ и в связи с этим возникло несколько вопросов. 1) если сделать так : myobj *obj...

Работа с указателями
Здравствуйте Не понимаю, почему в следующем коде #include &lt;iostream&gt; using namespace...


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

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