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

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

Войти
Регистрация
Восстановить пароль
 
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
#1

realloc - C++

13.03.2013, 17:29. Просмотров 480. Ответов 10
Метки нет (Все метки)

Доброго времени суток, есть код, в котором динамически выделяется память под массив, затем этот массив инициализируется с клавиатуры и выводится на элран, далее нужно с помощью уменьшить блок памяти, выделенный под массив вдвое, вот код:

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
// showarg.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <locale>
#include <stdlib.h>
using namespace std;
 
void main(int argc, char *argv[])
{
    wcout.imbue(locale(".866"));
 
    int size;
    wcout << L"Введите размерность массива: ";
        cin >> size;
 
    int *mas;
    mas = (int*)calloc(size, sizeof(int));          //выделяем память под массив
 
    wcout << L"\nВведите массив:\n";
    for(int i = 0; i < size; i++)
    {
        wcout << L"Введите элемент масива [" << i+1 << "]: ";
            cin >> mas[i];
    }
 
    wcout << L"\nВывод массива: ";
    for(int i = 0; i < size; i++)
        cout << mas[i] << " ";
 
    realloc(mas, ((sizeof(int) * size) / 2));           //сокращение выделенной памяти
 
    wcout << L"\nВывод массива: ";          //вывод массива после сокращения памяти
    for(int i = 0; i < size; i++)
        cout << mas[i] << " ";
 
    free(mas);
    cout << "\n\n";
}
Проблема в том, что у меня целые занимают 4 байта, когда я выделяю под массив из 4 элементов память, то выходит 16 байт, послы повторного использования realloc блок памяти должен уменьшиться в половину, вроде все правильно, однако при выводе массив хранит не 2 элемента а 3 и удаляется 3 а не 4... Благодарю за помощь!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2013, 17:29     realloc
Посмотрите здесь:

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++
Вообщем, не могу понять в чем ошибка, malloc() работает, а realloc() выдает ошибки. Имеется собственный тип item (структура, в которой два...

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

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

malloc, realloc - C++
У меня задан одномерный динамический массив таким образом: int *m1=new int; //n-количество элементов, вводится пользователем Далее этот...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KostyaKulakov
Заблокирован
13.03.2013, 17:33     realloc #2
Проблема в том, что у меня целые занимают 4 байта, когда я выделяю под массив из 4 элементов память, то выходит 16 байт, послы повторного использования realloc блок памяти должен уменьшиться в половину, вроде все правильно, однако при выводе массив хранит не 2 элемента а 3 и удаляется 3 а не 4... Благодарю за помощь![/QUOTE]

Заместо int *mas;
mas = (int*)calloc(size, sizeof(int));

C++
1
int* mas = new int[size];
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
13.03.2013, 17:37  [ТС]     realloc #3
KostyaKulakov, мне нужно именно calloc и realloc... как с new и delete работать я умею...
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
13.03.2013, 17:38     realloc #4
Цитата Сообщение от yoghurt92 Посмотреть сообщение
C++
1
2
3
4
realloc(mas, ((sizeof(int) * size) / 2)); //сокращение выделенной памяти
wcout << L"\nВывод массива: "; //вывод массива после сокращения памяти
for(int i = 0; i < size; i++)
 cout << mas[i] << " ";
переменную которая хранит размер кто будет изменять?
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
13.03.2013, 17:41  [ТС]     realloc #5
Jupiter,
Цитата Сообщение от Jupiter Посмотреть сообщение
переменную которая хранит размер кто будет изменять?
вы про size?
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
13.03.2013, 17:43     realloc #6
Цитата Сообщение от yoghurt92 Посмотреть сообщение
вы про size?
да.
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
13.03.2013, 17:47  [ТС]     realloc #7
Jupiter, подождите, но разве
Цитата Сообщение от Jupiter Посмотреть сообщение
(sizeof(int) * size) / 2)
(4*4) /2 не будет 8? разве тут не будет переопределение на память под 8 байт вместо 16?(беру пример 4 элемента в массиве)...
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
13.03.2013, 17:54     realloc #8
Цитата Сообщение от yoghurt92 Посмотреть сообщение
(4*4) /2 не будет 8?
будет
Цитата Сообщение от yoghurt92 Посмотреть сообщение
разве тут не будет переопределение на память под 8 байт вместо 16?(беру пример 4 элемента в массиве)...
будет, но это не делает ваш код правильным
C++
1
2
size /= 2;
mas = (int*)realloc(mas, sizeof(int) * size);
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
13.03.2013, 18:00  [ТС]     realloc #9
Сделал как вы сказали, но для проверки вывод сделал массива исходного размера, size уменьшил как вы сказали, просто в цикле поставил число и вот что получилось(прикрепил рисунок), почему показывает что удалено 4 элемента, а 8 и 10 остались?
Миниатюры
realloc  
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
13.03.2013, 18:02     realloc #10
Цитата Сообщение от yoghurt92 Посмотреть сообщение
почему показывает что удалено 4 элемента, а 8 и 10 остались?
освобождая память никакого удаления не происходит, система помечает освобожденную память как свободную и все
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2013, 18:04     realloc
Еще ссылки по теме:

Функция realloc - C++
Помогите правильно записать функцию realloc /*9. Дан одномерный массив из 100 элементов, состоящий из случайных вещественных чисел в...

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

аналог realloc() в С++ - C++
Здравствуйте. собственно вопрос:-существует ли таковой?

Альтернатива realloc ? - C++
Ищу способ динамически расширять массив объектов. В с++ использую new и delete, а перемешивать с ними сишные способы выделения памяти...


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

Или воспользуйтесь поиском по форуму:
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
13.03.2013, 18:04  [ТС]     realloc #11
Jupiter, спасибо вам, вы мне очень помогли!
Yandex
Объявления
13.03.2013, 18:04     realloc
Ответ Создать тему
Опции темы

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