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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.92
Alexpm
3 / 3 / 0
Регистрация: 06.09.2011
Сообщений: 47
#1

malloc, realloc - C++

01.12.2011, 15:09. Просмотров 3000. Ответов 4
Метки нет (Все метки)

У меня задан одномерный динамический массив таким образом:
int *m1=new int[n]; //n-количество элементов, вводится пользователем
Далее этот массив заполняется рандомными цифрами.
---
Из этого массива цифры удовлетворяющие условию должны копироваться в другой массив.
Но сколько будет таких цифер неизвестно (и будут ли вообще такие).
Получается, что при нахождении цифры необходимо выделять место в массиве, для записи данной цифры. Но как это сделать?

Вот вроде как то так делается:
int *m2 = (int*) malloc (???????); //сколько тут (в скобках) нужно указать, что б хватило под одну цифру, скопированную из массива m1? можно ли создать массив не выделив памяти хотябы одному элементу?

далее в цикле у меня идет:
m2[j]=m1[i]; //копируем, ведь под одну цифру у нас выделенно уже было в начале
m2=(int*) realloc (m2, ??????); //как выделить память дополнительно под один элемент? чтоб первый элемент остался на месте
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2011, 15:09     malloc, realloc
Посмотрите здесь:

malloc/realloc - C++
есть следующий код: mmlist=(_mathmod*)malloc(sizeof(_mathmod)); *mmlist=_mathmod(mm); int i=0; ...

Malloc realloc и C++ - C++
Подскажите, в C++ 11 выделение памяти по прежнему "нормально" выделять с помощью malloc и изменять размер realloc ? Или это уже прошлое?...

функции на основе realloc, malloc - C++
Подскажите как сократить написание "realloc", а то надоели эти писанины))) вот сделал уже следующее: size_t GetSize(void* Array) ...

Помогите переделать malloc в realloc! - C++
Нужно что бы распределение памяти было realoc-ом, помогите пожалуйста Красным выделен malloc //---------------------ZADANIE...

Работа с памятью через malloc,realloc и free - C++
Вот начал работать с памятью в c++ и появилось несколько вопросов. 1 - r = (int *)malloc((1)*sizeof(int)); как я понимаю, эта запись...

Что быстрее/эффективнее malloc/realloc или new/delete? - C++
Всем привет. Год программировал на СИ под микроконтроллеры... Начал изучать с++... Всё ново, интересно... Доковырялся до STL... В процессе...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
01.12.2011, 15:14     malloc, realloc #2
Цитата Сообщение от Alexpm Посмотреть сообщение
int *m2 = (int*) malloc (???????);
C
1
sizeof(int);
Добавлено через 1 минуту
Цитата Сообщение от Alexpm Посмотреть сообщение
m2=(int*) realloc (m2, ??????); //как выделить память дополнительно под один элемент? чтоб первый элемент остался на месте
У вас будет какой-то счетчик, например
C++
1
m2 = (int *) realloc (m2,sizeof(int)*(++count) );
Alexpm
3 / 3 / 0
Регистрация: 06.09.2011
Сообщений: 47
01.12.2011, 15:23  [ТС]     malloc, realloc #3
go


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
44
45
46
47
#include <iostream>
#include <stdlib.h>
#include <ctime>
using namespace std;
 
void main()
{
    setlocale(LC_ALL,"Russian");
    int n=10;
    cout<<"Введите n="<<" ";
    cin>>n;
    int *m1=new int[n];
    int *m2=(int*) malloc(sizeof(int));
 
    
    srand (time(NULL));
    int num;
    for(int i=0;i<n;i++)
    {
        num = rand() %n;
        m1[i] = num;
    }
 
 
    int k=0, p=0;
    for (int i=0; i<n; i++)
    {
        k=0;
        for (int j=1; j<=m1[i]; j++)
        {
            if (m1[i]%j==0)
            {
                k++;
            }
        }
        if (k==2)
        {
                m2[p]=m1[i];
                p++;
                m2=(int*) realloc (m2, p*sizeof(int));
                
        }
 
    }
 
 
    for (int i=0; i<p; i++) {cout<<m2[i]<<endl;}
Я вот так пробовал, но не получается... можно конечно выделить сразу таким образом: int *m2=(int*) malloc(n*sizeof(int)); но мне хочется разобраться, чтоб небыло затрачено лишней памяти.

Добавлено через 7 минут
Вопрос снимаю)) понял свой недочет)))
У меня там нужно написать:
m2=(int*) realloc (m2, (p*sizeof(int))+sizeof(int));
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
01.12.2011, 15:25     malloc, realloc #4
Alexpm, не нашел объявления вашего p
объявите
C
1
int p=1;
38-ую строчку удалите, а 41-ой напишите
C
1
m2[p-1] =(int *) realloc (m2,sizeof(int)*p) ;
39-ую строчку не трогайте

Добавлено через 1 минуту
Цитата Сообщение от Alexpm Посмотреть сообщение
m2=(int*) realloc (m2, (p*sizeof(int))+sizeof(int));
ну да, что я вам и написал
просто
C
1
m2=(int*) realloc (m2, ((p+1)*sizeof(int)));

Не по теме:

Да и malloc это сишная функция, а new С++

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2011, 15:26     malloc, realloc
Еще ссылки по теме:

Можно ли выделять память под объект класса с помощью функций calloc, malloc или realloc? - C++
Интересует данный вопрос. Можно ли и имеет ли вобще смысл например выделять память под объект класса с помощью функций calloc, malloc или...

realloc - C++
здраствуйте! решил накатать такой класс #include &lt;stdlib.h&gt; template &lt;typename TYPE&gt; class List { private: TYPE*...

realloc - C++
#include &lt;iostream&gt; using namespace std; int main() { int size=0; cout&lt;&lt;&quot;enter size array: &quot;; cin&gt;&gt;size; int...

realloc - C++
Доброго времени суток, есть код, в котором динамически выделяется память под массив, затем этот массив инициализируется с клавиатуры и...

Функция realloc - C++
Начнем сразу с кода. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;cstdlib&gt; int main(void) { using namespace std; ...

Не выполняется realloc - C++
Вообщем, не могу понять в чем ошибка, malloc() работает, а realloc() выдает ошибки. Имеется собственный тип item (структура, в которой два...


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

Или воспользуйтесь поиском по форуму:
Alexpm
3 / 3 / 0
Регистрация: 06.09.2011
Сообщений: 47
01.12.2011, 15:26  [ТС]     malloc, realloc #5
Цитата Сообщение от go Посмотреть сообщение
не нашел объявления вашего p
в той же строчке где и "k" (25 строка)
Цитата Сообщение от go Посмотреть сообщение
объявите
Код C1 int p=1;
так нельзя, т.к. 0 элемент массива тоже существует

ps: Данный код создает динамический массив, заполняет его рандомными символами. Далее все простые числа копирует в другой динамический массив (которому выделяется память во время цикла).
Yandex
Объявления
01.12.2011, 15:26     malloc, realloc
Ответ Создать тему
Опции темы

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