Динамическое выделение памяти
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Динамическое выделение памяти Expand / Collapse
Автор
Сообщение
27.12.2006 18:36
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 02.01.2007 9:50
Сообщ.: 14, Visits: 65
Есть следующее объявление

#include<iostream>

#define MAX 1000

//=======================

int  arr[MAX];

int  arr2[MAX];

int arr3[MAX];

//================

int main()

{

   

}

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

Мой вопрос: следующая организация выделения динамической памяти будет правильной?

int main()

{

    int *p, *p2, *p3;

    p = new int [MAX];

    p2 = new int [MAX];

    p3  = new int [MAX];

    for( int i = 0; i < MAX; i++)

{

          p[i] = arr[i];

          p2[i] = arr2[i];

          p3[i] = arr3[i]; 

}

   ...

  delete [] p;

 delete []p2;

 delete [] p3;

}

Или это можно сделать иначе?

Сообщ. #909306
27.12.2006 18:46
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
По моему все правильно сделано.
Сообщ. #909307
27.12.2006 18:49
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Хотя погоди. Если у тебя уже есть объявление вида int arr[MAX], то непонятно зачем создавать копию массива в динамической памяти. Что ты в итоге хочешь получить?
Сообщ. #909308
27.12.2006 22:05
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

модератор
Last Login: 09.07.2008 2:17
Сообщ.: 1 298, Visits: 12 500
у него просто задание: написать пример динамического выделения памяти под массив переменной длины на С++ ;)

в принципе все верно сделано, только код бессмысленный

Удачи,
Владимир
Сообщ. #909310
28.12.2006 8:53
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 02.01.2007 9:50
Сообщ.: 14, Visits: 65
Дело в том, что эти массивы хранят некоторые значения от вычислений. Здесь я продемонстрировал сегмент кода, который, мне до конца, неясен.
Сообщ. #909315
28.12.2006 11:14
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Нам он тоже неясен. boombastik правильно сказал что код верный, но бессмысленный.
Сообщ. #909325
28.12.2006 12:50
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

модератор
Last Login: 09.07.2008 2:17
Сообщ.: 1 298, Visits: 12 500
нуууу если это часть кода... то верхняя его половина (там где new int [MAX]) создает массивы, цикл заполняет эти массивы данными из других массивов (arr, arr2, arr3), а нижняя часть кода (там где delete) освобождает, созданные выше, массивы.

если дать волю воображению, то можно предположить, что во временных массивах сохраняются промежуточные данные от каких-то вычислений, причем требуется 2 копии - оригинальная (arr, arr2, arr3) и рабочая (p, p2, p3), потому как одна из них будет изменяться, а в конце, перед delete проводится сравнение результатов

сказать что либо больше сложно, нужно смотреть, что происходит с массивами

С уважением,
Владимир
Сообщ. #909330
24.02.2007 13:23


Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 30.06.2007 8:03
Сообщ.: 28, Visits: 42
правильный код?
если так код писать, то большие проекты будут коряво выглядеть.
выделение динамической памяти под многомерные массивы проще и нагляднее выполняется в циклах.

Двумерный массив:

static int firstRes = 10;
static int secondRes = 100;

int **mass = NULL;
mas = new int*[firstRes];
for (int i = 0; i < firstRes; i++) {
mass[i] = new int[secondRes];
}
...usage mass
for (int i = 0; i < firstRes; i++) {
delete mass[i];
}
delete []mass;

Сообщ. #911059
24.02.2007 14:30
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

модератор
Last Login: 09.07.2008 2:17
Сообщ.: 1 298, Visits: 12 500
genok (24.02.2007)
правильный код?
если так код писать, то большие проекты будут коряво выглядеть.
выделение динамической памяти под многомерные массивы проще и нагляднее выполняется в циклах.

Двумерный массив:

static int firstRes = 10;
static int secondRes = 100;

int **mass = NULL;
mas = new int*[firstRes];
for (int i = 0; i < firstRes; i++) {
mass[i] = new int[secondRes];
}
...usage mass
for (int i = 0; i < firstRes; i++) {
delete mass[i];
}
delete []mass;



нуу.... уж коли пошли критиковать правильность, то хотя бы массивы удаляйте так как это принято стандартом C++

for (int i = 0; i < firstRes; i++) {
delete[] mass[i];
}

С уважением,
Владимир
Сообщ. #911061