Другие языки программирования и технологии

Помогите с программой на Си/Си++

Хочу в одномерном массиве задать размерность и диапазно динамически.Подскажите как сделать.Вроде бы через malloc нужно,но не пойму как...
Олег Савельев
Олег Савельев
1 336
Во-первых, если речь идет о языке С++, то там имеется контейнер vector, который и является массивом с динамически задаваемым количеством элементов!

Вы можете объявить

#include <vector>

int main()
{
std::vector<int> v;

v.push_back( 10 );
return 0;
}

То есть ч помощью метода push_back() вы можете занести в вектор столько элементов, сколько хотите. Вектор сам позаботится о выделении необходимой памяти. ( Число 10 в данном примере - это значение, которое будет содержать первцый элемент массива. Я выюрал его произвольно) .
Либо вы можете сами выделять в куче память с помощью оператора new/
Например,

#include <memory>

#define MAX_SIZE 10

int main()
{
int *array;
array = new int[ MAX_SIZE];
// используете массив, как хотите
delete [] array;
return 0;
}

Проблема только в том, что если в процессе работы вам надо увеличить размер массива, например, сделать не 10 элементов, а 20, то вам надо снова выделить память на 20 элементов, переписать из старого массива в новый, а старый удалить. Например

#include <memory>
#include <cstring>

#define MAX_SIZE 10
#define NEW_MAX_SIZE 20

int main()
{
int *array;
array = new int[ MAX_SIZE];
// используете массив, как хотите
int *tmp;
tmp = new int[NEW_MAX_SZIE]

std::memcpy( tmp, array, MAX_SIZE * sizeof( int ) );

delete [] array;

array = tmp;

return 0;
}

В языке С это делается с помощью функций malloc() и free() из библиотеки stdlib.

Например

#include <stdlib.h>

#define MAX_SIZE 10

int main()
{
int *array;

array = malloc( MAX_SIZE * sizeof( int ) );

// используете массив, как хотите

free( array );

return 0;
}
Николай Остапенко
Николай Остапенко
79 586
Лучший ответ
На с++ используй new и delete

int * mass; //определили указатель на будущий массив
int size;//переменная которая будет содержать размер массива

//как-то (как хочешь) задаем значение переменной size (>0)
mass = new int[size]; // выделяем память под массив

//инициализируем массив и используем его

delete []mass; //освобождаем память выделенную для массива.

на с
подключи библиотеку stdlib.h
и замени в предыдущем коде
mass = new int[size];
на
mass=malloc(size*sizeof(int));

а вместо
delete []mass;
напиши

free(mass);