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

Изменение размера массива - C++

Восстановить пароль Регистрация
 
Blueeyer
12 / 12 / 1
Регистрация: 09.10.2013
Сообщений: 220
30.04.2014, 14:44     Изменение размера массива #1
Допустим в main-е я объявил указатель определенного типа и создал переменную int size, затем адрес указателя и переменной size передаю первую функцию. В ней меняется значение переменной size и объявляется массив динамический массив, адрес которого совпадает с указателем, который я передал. Массив имеет размер size. Всё это возвращается в main, а затем передается в другую функцию, массив очищается (delete [] mass), меняется значение size и объявляется новый массив с большим или меньшим значением, чем был в первой функции, имеющий опять же тот же адрес, что и мой первоначальный указатель.

Не знаю, достаточно ли понятно я всё описал, но можно ли так делать? Грамотно ли это?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.04.2014, 15:00     Изменение размера массива #2
Цитата Сообщение от Blueeyer Посмотреть сообщение
затем адрес указателя и переменной size передаю первую функцию.
Как передаёте?
Цитата Сообщение от Blueeyer Посмотреть сообщение
объявляется массив динамический массив, адрес которого совпадает с указателем, который я передал.
Что значит: "адрес которого совпадает с указателем"?
Цитата Сообщение от Blueeyer Посмотреть сообщение
Всё это возвращается в main
Как возвращается?
Лучше пример кода покажите.
Blueeyer
12 / 12 / 1
Регистрация: 09.10.2013
Сообщений: 220
30.04.2014, 16:00  [ТС]     Изменение размера массива #3
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
#include<iostream>
#include<ctime>
 
using namespace std;
 
void FillMass(float* &mass, int &size);
void ShowMass(float *mass, int size);
void ReFillMass(float* &mass, int &size);
 
int main(){
    float *mass;
    int size = 1;
    FillMass(mass, size);
    ShowMass(mass,size);
    cout << endl;
    ReFillMass(mass, size);
    ShowMass(mass,size);
    cout << endl;
    system("PAUSE");
    return false;
}
 
void FillMass(float* &mass, int &size){
    size = 5;
    mass = new float[size];
    for (unsigned int i = 0; i < size; i++){
        mass[i] = i*10;
    }
}
 
void ShowMass(float *mass, int size){
    for (unsigned int i = 0; i < size; i++){
        cout << mass[i] << " ";
    }
}
 
void ReFillMass(float* &mass, int &size){
    size = 8;
    mass = new float[size];
    for (unsigned int i = 0; i < size; i++){
        mass[i] = i*10;
    }
}

- грамотно ли это? и надо ли в функции ReFillMass() перед объявлением нового массива - освобождать старый?
C++
1
delete [] mass;
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
30.04.2014, 16:04     Изменение размера массива #4
C++
1
2
3
4
int main(){
    ....
    return false;
}
Для этого есть специальный макрос EXIT_SUCCESS
http://www.cplusplus.com/reference/c.../EXIT_SUCCESS/
Цитата Сообщение от Blueeyer Посмотреть сообщение
и надо ли в функции ReFillMass() перед объявлением нового массива - освобождать старый?
Да.
Blueeyer
12 / 12 / 1
Регистрация: 09.10.2013
Сообщений: 220
30.04.2014, 16:07  [ТС]     Изменение размера массива #5
И заметил такую вещь, что если вторая функция будет такой:
C++
1
2
3
4
5
void ReFillMass(float* &mass, int &size){
    for (unsigned int i = 0; i < size; i++){
        mass[i] = i*10;
    }
}
то всё нормально заполняется, хотя массив изначально был объявлен с меньшим размером
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.04.2014, 16:29     Изменение размера массива #6
Цитата Сообщение от Blueeyer Посмотреть сообщение
то всё нормально заполняется, хотя массив изначально был объявлен с меньшим размером
В конце main() сделайте:
C++
1
delete [] mass;
Blueeyer
12 / 12 / 1
Регистрация: 09.10.2013
Сообщений: 220
30.04.2014, 17:33  [ТС]     Изменение размера массива #7
так а если после первой функции был создан динамический массив 5 элементов, а после второй - 8 элементов, то не надо ли перед созданием большего массива - удалить предыдущий?

Добавлено через 2 минуты
И вот второй вариант, когда был объявлен массив из 5 элементов, но заполнено от mass[0] до mass[7] - это ведь опасно?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.04.2014, 17:47     Изменение размера массива #8
Цитата Сообщение от Blueeyer Посмотреть сообщение
так а если после первой функции был создан динамический массив 5 элементов, а после второй - 8 элементов, то не надо ли перед созданием большего массива - удалить предыдущий?
Это разве был ответ не на этот вопрос?
Цитата Сообщение от Ilot Посмотреть сообщение
Да.
Добавлено через 2 минуты
Цитата Сообщение от Blueeyer Посмотреть сообщение
это ведь опасно?
Выход за границу массива, память портится.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2014, 17:48     Изменение размера массива
Еще ссылки по теме:

C++ Изменение размера динамического массива (resize)
Изменение размера массива C++
Изменение размера динамического массива объектов класса C++

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

Или воспользуйтесь поиском по форуму:
Blueeyer
12 / 12 / 1
Регистрация: 09.10.2013
Сообщений: 220
30.04.2014, 17:48  [ТС]     Изменение размера массива #9
ой, не заметил изначально, прошу прощения
Yandex
Объявления
30.04.2014, 17:48     Изменение размера массива
Ответ Создать тему
Опции темы

Текущее время: 10:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru