|
|
|
Junior 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; }
Или это можно сделать иначе?
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| По моему все правильно сделано.
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Хотя погоди. Если у тебя уже есть объявление вида int arr[MAX], то непонятно зачем создавать копию массива в динамической памяти. Что ты в итоге хочешь получить?
|
|
|
|
|
Supreme Being
      
модератор
Last Login: 09.07.2008 2:17
Сообщ.: 1 298,
Visits: 12 500
|
|
у него просто задание: написать пример динамического выделения памяти под массив переменной длины на С++ ;)
в принципе все верно сделано, только код бессмысленный
Удачи,
Владимир
|
|
|
|
|
Junior Member
      
участник
Last Login: 02.01.2007 9:50
Сообщ.: 14,
Visits: 65
|
|
| Дело в том, что эти массивы хранят некоторые значения от вычислений. Здесь я продемонстрировал сегмент кода, который, мне до конца, неясен.
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Нам он тоже неясен. boombastik правильно сказал что код верный, но бессмысленный.
|
|
|
|
|
Supreme 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 проводится сравнение результатов
сказать что либо больше сложно, нужно смотреть, что происходит с массивами
С уважением,
Владимир
|
|
|
|
|
Forum 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;
|
|
|
|
|
Supreme 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];
}
С уважением,
Владимир
|
|
| |