С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
casper007
67 / 67 / 22
Регистрация: 12.12.2013
Сообщений: 402
#1

Как определить массив, размерность которого определяет пользователь после запуска программы на выполнение? - C++

10.01.2014, 21:36. Просмотров 939. Ответов 23
Метки нет (Все метки)

C++
1
2
int k;
int mass[k];//к-еще не инициализирован, и поэтому выводится ошибка, а менять значение нельзя
Очевидно, что нужен указатель. Но как это реализовать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2014, 21:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как определить массив, размерность которого определяет пользователь после запуска программы на выполнение? (C++):

Как сделать так,чтобы размерность массива вводил пользователь и массив заполнялся случайными числами? - C++
#include "stdafx.h" #include <iostream> #include <locale> #include <stdlib.h> using namespace std; void mas(int a) //вывод...

Многомерный массив значений, размерность которого возрастает. Оцените код - C++
Всем привет! 8-) У меня возникла задача, и я решил сначала придумать свой вариант ее решения, и уже затем, спрашивать совета у...

Дан массив действительных чисел, размерность которого N. Подсчитать, сколько в нем отрицательных, положительных и нулевых элементов - C++
Дан массив действительных чисел, размерность которого N. Подсчитать, сколько в нем отрицательных, положительных и нулевых элементов

Как объявить массив, размерность которого заранее не известна - C#
как определить массив если мы не знаем сколько элементов в нем будет? Заголовок продумываем

Как можно программно, после запуска программы, переместить окно программы на определенные координаты? - Visual Basic
Как можно программно, после запуска программы, переместить окно программы на определенные координаты?

Определить, как изменится массив после работы программы - Free Pascal
Написать программы: 1) В программе описан одномерный целочисленный массив с индексами от 0 до 10. В приведенном ниже фрагменте программы...

23
ilja123
43 / 43 / 7
Регистрация: 24.12.2009
Сообщений: 404
10.01.2014, 23:25 #16
Ну типа вектора это для слабакоФ, а настоящие прогеры юзают чистые указатели

Добавлено через 1 минуту
А вообще Вектора - лучший выбор ИМХО
0
some_name
Вежливость-главное оружие
227 / 225 / 55
Регистрация: 19.02.2013
Сообщений: 1,441
10.01.2014, 23:33 #17
Цитата Сообщение от ilja123 Посмотреть сообщение
ну я в нете видел и такое
Код C++
1
2
for(i=0; i<=N; i++)
delete p[i];
тоже верно.

Цитата Сообщение от ilja123 Посмотреть сообщение
Хде правду искать???
Просто усвойте, что некоторые вещи можно делать по-разному
0
ilja123
43 / 43 / 7
Регистрация: 24.12.2009
Сообщений: 404
10.01.2014, 23:35 #18
Цитата Сообщение от some_name Посмотреть сообщение
Просто усвойте, что некоторые вещи можно делать по-разному
(камнями не бейте) но это недостаток языка
0
AnDrew_LP
160 / 160 / 9
Регистрация: 29.05.2010
Сообщений: 435
11.01.2014, 00:01 #19
Цитата Сообщение от some_name Посмотреть сообщение
тоже верно.
Нет, это называется неопределенное поведение. Попробуйте запустить программу с delete[] и с delete

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
 
class MyClass
{
public:
    MyClass() {}
    ~MyClass()
    {
        std::cout << "Destructor: " << std::endl;
    }
};
 
int main()
{
    MyClass *p = new MyClass[2];
    delete []p;//попробуйте запустить без []
    system("pause");
    return 0;
}
0
some_name
Вежливость-главное оружие
227 / 225 / 55
Регистрация: 19.02.2013
Сообщений: 1,441
11.01.2014, 00:30 #20
AnDrew_LP, вы правы, я сглупил.

Ведь массив это занимает цельный блок памяти и если нам будет позволено делать что-то типа:
C++
1
delete arr[i];
то мы "разорвем массив", а это уже серьезный косяк.
0
ilja123
43 / 43 / 7
Регистрация: 24.12.2009
Сообщений: 404
11.01.2014, 01:03 #21
Цитата Сообщение от AnDrew_LP Посмотреть сообщение
Попробуйте запустить программу с delete[] и с delete
я пробовал Ничего не заметил Вот и спросил Как можно проверить

Добавлено через 17 секунд
вы сказали "никак"
0
AnDrew_LP
160 / 160 / 9
Регистрация: 29.05.2010
Сообщений: 435
11.01.2014, 01:29 #22
Цитата Сообщение от ilja123 Посмотреть сообщение
я пробовал Ничего не заметил Вот и спросил Как можно проверить

Добавлено через 17 секунд
вы сказали "никак"
1)http://ru.wikipedia.org/wiki/%D0%9D%...BD%D0%B8%D0%B5
2)В Вашем коде был массив int, в моем собственный класс. Попробуйте скомпилировать без [] мой код, увидите результат.
3)Если с int в Visual Studio все нормально работает, не факт, что будет нормально работать с другим компилятором.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7498 / 4614 / 694
Регистрация: 29.11.2010
Сообщений: 12,634
11.01.2014, 02:50 #23
Цитата Сообщение от ilja123 Посмотреть сообщение
Как проверить??
по стандарту если выделяли память через new[], а удаляли через delete, то это UB

Добавлено через 4 минуты
5.3.5
1. The delete-expression operator destroys a most derived object (1.8) or array created by a new-expression.
delete-expression:
::optdelete cast-expression
::optdelete [ ] cast-expression
The first alternative is for non-array objects, and the second is for arrays. Whenever the delete keyword
is immediately followed by empty square brackets, it shall be interpreted as the second alternative.76
The operand shall have a pointer to object type, or a class type having a single non-explicit conversion
function (12.3.2) to a pointer to object type. The result has type void.
2. If the operand has a class type, the operand is converted to a pointer type by calling the above-mentioned
conversion function, and the converted operand is used in place of the original operand for the remainder of
this section. In the first alternative (delete object), the value of the operand of delete may be a null pointer
value, a pointer to a non-array object created by a previous new-expression, or a pointer to a subobject (1.8)
representing a base class of such an object (Clause 10). If not, the behavior is undefined.
In the second
alternative (delete array), the value of the operand of delete may be a null pointer value or a pointer
value that resulted from a previous array new-expression.78 If not, the behavior is undefined. [ Note: this
means that the syntax of the delete-expression must match the type of the object allocated by new, not
the syntax of the new-expression. —end note ] [ Note: a pointer to a const type can be the operand of a
delete-expression; it is not necessary to cast away the constness (5.2.11) of the pointer expression before it
is used as the operand of the delete-expression. —end note ]
0
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
15.01.2014, 15:01 #24
Цитата Сообщение от some_name Посмотреть сообщение
то мы "разорвем массив", а это уже серьезный косяк.
Мы не массив разорвём, мы разорвём себе мозг, выискивая, по какой причине у нас программа крашится в рантайме. Нельзя просто так освободить кусок массива, оператор delete/delete[] надо применять только к тому же адресу, что когда-то вернул соответствующий new/new[].
0
15.01.2014, 15:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2014, 15:01
Привет! Вот еще темы с ответами:

Как определить масив, размерность кторого вычисляется в процессе работы программы? - VBA
Как определить масив, размерность кторого вычисляется в процессе работы программы: Т.е. идет строка: n =...

Создать динамический массив, размерность которого будет варьироваться - VBA
Здравствуй киберфорум, пришлось столкнуться с одной задачей, алгоритм выполнения которой понятен и просчитан, но так как планируется ввод...

Автоматическое выполнение кода после запуска приложения - Ruby on Rails
Всем здравствуйте. Столкнулся с такой необходимостью: сразу же после запуска приложения надо начать выполнение ruby-кода (создание...

Определить логический вектор, размерность которого равна размерности массивов координат - Matlab


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.