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

Можно ли задать массив, не зная заранее его длину? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.69
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
04.10.2011, 06:18     Можно ли задать массив, не зная заранее его длину? #1
Доброе утро всем.

Вчера начал читать "главу 4 Массивы". Там предложили 2 варианта объявления массива:
1) неинициализированный
C++
1
int A[4];
2) инициализированный
C++
1
int A[]={2,3,5,1};
Я это напечатал, всё работает.

Потом в учебнике написано так:
"Ввод элементов одномерного массива также можно организовать с клавиатуры, например следующим образом:"
И приведён код:
C++
1
2
3
cin>>size;
for (i=0; i<size; i++)
cin>>A[i];
Я это записал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <conio.h> 
using namespace std;
int main() 
{       
    int i, size, A[size];
    cout<<"Vvedite razmer massiva"<<endl<<"size=";
    cin>>size;
 
    for (i=0; i<size; i++)
        cin>>A[i];
    
    for (i=0; i<size; i++)
        cout<<A[i]<<endl;
        
    getch();  
    return 0;
}
Я подумал так: вначале я ввожу с клавиатуры размер массива А (строчка 8),
потом ввожу по очереди все элементы в массив (строчки 10, 11),
а потом чтобы он мне вывел массив на экран (13, 14).

Но не работает. При компиляции 3 ошибки:
error C2057: требуется константное выражение
error C2466: невозможно выделить память для массива постоянного нулевого размера
error C2133: A: неизвестный размер

Так что неправильно то? Я вроде бы всё по учебнику сделал.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2011, 06:18     Можно ли задать массив, не зная заранее его длину?
Посмотрите здесь:

Можно работать с файлом зная что он в одной директории с экзешником но не зная в какой ? C++
C++ Как можно объявить класс, заранее не зная его тип template.
Преобразовать массив удвоив длину его серии C++
C++ как захватить динамически память, не зная заранее какое количество памяти надо?
C++ как задать массив n на m и заполнить его с клавиатуры
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
05.10.2011, 08:40  [ТС]     Можно ли задать массив, не зная заранее его длину? #21
Цитата Сообщение от vitaly1981 Посмотреть сообщение
Так delete [] myArray; нужно ставить в самом конце! ПРичем это обязательное правило хорошего программиста! Память которую выделил, нужно освободить, когда закончил с ней работать.
Вполне понятно почему тебе после освобождения памяти выводилась всякая фигня
Вот так? :
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
#include <iostream>
#include <conio.h> 
using namespace std;
int main() 
{       
    int i, size;
    cout<<"Vvedite razmer massiva"<<endl<<"size=";
    cin>>size;
 
    int * myArray;
    myArray = new int [size]; 
 
    for (i=0; i<size; i++)
    {
        cout<<"myArray["<<i<<"]=";
        cin>>myArray[i];
    }
 
    for (i=0; i<size; i++)
        cout<<myArray[i]<<endl;
 
    delete[] myArray;
        
    getch();  
    return 0; 
}
А когда программа заканчивает работу и выключается, разве память сама не освобождается? Или это существенно для больших программ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2011, 08:56     Можно ли задать массив, не зная заранее его длину?
Еще ссылки по теме:

Как прочитать последовательно все текстовые файлы лежащие в папке, не зная заранее их имен? C++
C++ Найти длину диагонали, периметр и площадь прямоугольника, зная длины его сторон
C++ Найти площадь поверхности и объем куба, зная длину его ребра.

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

Или воспользуйтесь поиском по форуму:
solar_wind
 Аватар для solar_wind
740 / 731 / 39
Регистрация: 06.07.2009
Сообщений: 2,937
Завершенные тесты: 1
05.10.2011, 08:56     Можно ли задать массив, не зная заранее его длину? #22
Alex Z, Можно так.
В данном случае память освободится, но в общем случае, когда будешь писать более сложную программу это может быть очень значимо, так что привыкай сразу.
Тем более если ты это делаешь в рамках учебы, преподаватель может обратить внимание на отсутствие освобождения памяти.
Yandex
Объявления
05.10.2011, 08:56     Можно ли задать массив, не зная заранее его длину?
Ответ Создать тему
Опции темы

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