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

функции на основе realloc, malloc - C++

Восстановить пароль Регистрация
 
FinancialShark
2 / 2 / 0
Регистрация: 24.01.2014
Сообщений: 41
25.01.2014, 12:33     функции на основе realloc, malloc #1
Подскажите как сократить написание "realloc", а то надоели эти писанины)))

вот сделал уже следующее:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
size_t GetSize(void* Array)
{
    return(_msize(Array)/sizeof(Array));
}
 
//теперь надо вот это:
 
void* ReSize(void* Array, size_t Size, тип???)
{
    return((тип???)realloc(Array, sizeof(тип?????)*NewSize));
}
 
void* SetSize(size_t Size, тип данных?????)
{
    return((тип???)malloc(sizeof(тип?????)*NewSize));
}
как передать в функцию тип данных??????
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2014, 12:33     функции на основе realloc, malloc
Посмотрите здесь:

C++ Помогите переделать malloc в realloc!
C++ malloc/realloc
malloc, realloc C++
C++ Каково назначение функции malloc
C++ Работа с памятью через malloc,realloc и free
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
virtuos553
 Аватар для virtuos553
48 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 247
Записей в блоге: 1
25.01.2014, 12:42     функции на основе realloc, malloc #2
если не нравится malloc и realloc используй new и delete

C++
1
int()*mas=new int[size]
Синтаксис выделения памяти для массива имеет вид указатель = new тип[размер]. В качестве размера массива может выступать любое целое положительное значение.
FinancialShark
2 / 2 / 0
Регистрация: 24.01.2014
Сообщений: 41
25.01.2014, 13:07  [ТС]     функции на основе realloc, malloc #3
virtuos553, синтаксис выделения памяти для массива имеет вид указатель = new тип[размер]. В качестве размера массива может выступать любое целое положительное значение.[/QUOTE]

суть не в том как создать, а как изменить уже готовое.
и тип данных не только int но и классы.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
25.01.2014, 13:15     функции на основе realloc, malloc #4
Первую скобку можно смело убрать, компилятор С сам приведет сырую память к нужному типу.
По поводу вторых - можно указывать (*Array)

Упс, ветки то не те. Тогда везде (*Array), но лучше все-таки new/delete используйте.
FinancialShark
2 / 2 / 0
Регистрация: 24.01.2014
Сообщений: 41
26.01.2014, 09:15  [ТС]     функции на основе realloc, malloc #5
Называется Помоги себе САМ!!!!

и так, если кому понадобится то вот два способа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//1)
template<typename TYPE>
TYPE ArrayReSize(void *Memory, uint NewSize)
{
    return realloc(Memory, sizeof(&TYPE)*NewSize)
}
 
//2)
#define ReSize(Memory, NewSize, Type) (Type *)realloc(Memory,sizeof(Type)*NewSize)
 
//И тоже самое для 
calloc
malloc
Добавлено через 2 минуты
Цитата Сообщение от MrGluck Посмотреть сообщение
Первую скобку можно смело убрать, компилятор С сам приведет сырую память к нужному типу.
По поводу вторых - можно указывать (*Array)

Упс, ветки то не те. Тогда везде (*Array), но лучше все-таки new/delete используйте.

Mr.Gluck
а как вы будете использовать
C++
1
new/delete
если у Вас массив указателей на абсолютно разные производные классы от базового, и что если вам надо добавить в этот массив элементы без потери старых?

Добавлено через 2 часа 4 минуты
Небольшая поправка
C++
1
2
3
4
5
6
7
8
template<typename TYPE> TYPE* ArrayReSize(void *Memory, size_t NewSize)
{
    return (TYPE*)realloc(Memory, sizeof(TYPE)*NewSize)
}
 
//вызов функции выглядит так:
int **Array;
Array = ArrayReSize<int*>(Array, "новый размер");
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
26.01.2014, 13:04     функции на основе realloc, malloc #6
FinancialShark, Вам пора ознакомиться с std::vector, а не заморачиваться с сишным подходом через realloc, коли уж тема в разделе "C++".
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
26.01.2014, 20:28     функции на основе realloc, malloc #7
Цитата Сообщение от FinancialShark Посмотреть сообщение
Называется Помоги себе САМ!!!!
если вы слушать никого не хотите, то да.
Цитата Сообщение от FinancialShark Посмотреть сообщение
если у Вас массив указателей на абсолютно разные производные классы от базового
элементарно - буду хранить массив указателей на базовые классы. В этом суть полиморфизма
FinancialShark
2 / 2 / 0
Регистрация: 24.01.2014
Сообщений: 41
27.01.2014, 16:01  [ТС]     функции на основе realloc, malloc #8
Цитата Сообщение от MrGluck Посмотреть сообщение
если вы слушать никого не хотите, то да.
элементарно - буду хранить массив указателей на базовые классы. В этом суть полиморфизма
тогда при чем тут new/delete ?????

new создает(выделяет память);
delete удаляет(освобождает память);

а надо уже к созданному добавить или отнять БЕЗ ПОТЕРИ ДАННЫХ!!!!!

вы читать умеете? "суть не в том как создать, а как изменить уже готовое.
и тип данных не только int но и классы. "


Добавлено через 3 минуты
Цитата Сообщение от Tulosba Посмотреть сообщение
FinancialShark, Вам пора ознакомиться с std::vector, а не заморачиваться с сишным подходом через realloc, коли уж тема в разделе "C++".
Если можно в кратце. who is std::vector? в плане что он может?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.01.2014, 16:16     функции на основе realloc, malloc
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
27.01.2014, 16:16     функции на основе realloc, malloc #9
Цитата Сообщение от FinancialShark Посмотреть сообщение
who is std::vector?
http://www.cplusplus.com/reference/vector/vector/
Yandex
Объявления
27.01.2014, 16:16     функции на основе realloc, malloc
Ответ Создать тему
Опции темы

Текущее время: 09:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru