Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049

realloc

13.03.2013, 17:29. Показов 1477. Ответов 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... Благодарю за помощь!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.03.2013, 17:29
Ответы с готовыми решениями:

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

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

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

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

C++
1
int* mas = new int[size];
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
13.03.2013, 17:37  [ТС]
KostyaKulakov, мне нужно именно calloc и realloc... как с new и delete работать я умею...
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
13.03.2013, 17:38
Цитата Сообщение от 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] << " ";
переменную которая хранит размер кто будет изменять?
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
13.03.2013, 17:41  [ТС]
Jupiter,
Цитата Сообщение от Jupiter Посмотреть сообщение
переменную которая хранит размер кто будет изменять?
вы про size?
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
13.03.2013, 17:43
Цитата Сообщение от yoghurt92 Посмотреть сообщение
вы про size?
да.
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
13.03.2013, 17:47  [ТС]
Jupiter, подождите, но разве
Цитата Сообщение от Jupiter Посмотреть сообщение
(sizeof(int) * size) / 2)
(4*4) /2 не будет 8? разве тут не будет переопределение на память под 8 байт вместо 16?(беру пример 4 элемента в массиве)...
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
13.03.2013, 17:54
Цитата Сообщение от yoghurt92 Посмотреть сообщение
(4*4) /2 не будет 8?
будет
Цитата Сообщение от yoghurt92 Посмотреть сообщение
разве тут не будет переопределение на память под 8 байт вместо 16?(беру пример 4 элемента в массиве)...
будет, но это не делает ваш код правильным
C++
1
2
size /= 2;
mas = (int*)realloc(mas, sizeof(int) * size);
1
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
13.03.2013, 18:00  [ТС]
Сделал как вы сказали, но для проверки вывод сделал массива исходного размера, size уменьшил как вы сказали, просто в цикле поставил число и вот что получилось(прикрепил рисунок), почему показывает что удалено 4 элемента, а 8 и 10 остались?
Миниатюры
realloc  
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
13.03.2013, 18:02
Цитата Сообщение от yoghurt92 Посмотреть сообщение
почему показывает что удалено 4 элемента, а 8 и 10 остались?
освобождая память никакого удаления не происходит, система помечает освобожденную память как свободную и все
2
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
13.03.2013, 18:04  [ТС]
Jupiter, спасибо вам, вы мне очень помогли!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.03.2013, 18:04
Помогаю со студенческими работами здесь

Realloc и цикл
Здравствуйте, у меня возникает проблема с этой функцией когда поступают на вход равные n n2. На последнем проходе цикла выдает ошибку...

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

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

ошибка realloc C++
Как изменить размер выделенной памяти? (например выделено 15 байт, как в C++ увеличить размер выделенной...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru