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

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

Войти
Регистрация
Восстановить пароль
 
ObiSan
5 / 5 / 0
Регистрация: 08.10.2010
Сообщений: 23
#1

Шаблон и выделение памяти - C++

01.04.2011, 17:13. Просмотров 1044. Ответов 4
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
template<class T> T CreateArray(T a, int n)
{
    a = new T [n]; // ошибка: double* = double**
    return a;
}
 
int main()
{
    double* a;
    int n = 5;
    a = CreateArray(a,n);
    return 0;
}
Могу ли я выделить таким образом память? И в чем ошибка?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2011, 17:13     Шаблон и выделение памяти
Посмотрите здесь:

Выделение памяти под шаблон класса - C++
Здравствуйте, надеюсь это последняя тема от меня. А то что-то много вопросов последнее время. Очень надеюсь на помощь. Собственно, есть 2...

Создать класс-шаблон, откладывающий выделение динамической памяти до первого реального обращения к массиву - C++
нужно создать класс-шаблон, который откладывает выделение динамической памяти до первого реального обращения к массиву также нужно ...

Выделение памяти - C++
Какой суммарный объем памяти в байтах будут занимать поля CObj всех объектов класса CEx в этой программе: class CEx {public: static...

Выделение памяти - C++
Платформа и компилятор x64. Установлено 64Gb ОЗУ, 60Gb из них откусил SQL Server. Пытаюсь сделать следующее: struct Dictionary { ...

выделение памяти - C++
Здравствуйте, помогите пожалуйста исправить ошибку, это лишь малая часть кода. В задании: поле name должно быть динамическим: char...

До выделение памяти в С++ - C++
Всем приветик. Вообщем есть некоторые сложности с довыделение памяти... Что я хочу сделать: есть 2-х мерный массив (он ещё и квадратный)....

Выделение памяти - C++
Часто возникает такая проблема, когда конфигурирую проект как Release происходит ошибка выделения памяти (при вызывании new), например...

Выделение памяти(С = С++) - C++
Привет. Нужна помощь, в выделении памяти. Есть код на С, нужно перевести его в С++. int SaveFileOne(int i) { FILE *f; if ((f =...

Выделение памяти - C++
Во время выполнения программы после ввода нескольких символов выводит ошибку: double free or corruption(out): 0x0000000001157010 ***...

выделение памяти - C++
есть класс множество. необходимо создать класс &quot;правило&quot;, одним из методов которого является добавление множества к соответствующему списку...

Выделение памяти. - C++
Значит так.Задача такая. Ввести строки или строку символов. Сколько мы будем вводить символов неизвестно.Может быть 10 а может быть...

Выделение памяти - C++
Эта программа должна забрать у системы 10 МБ, но диспетчер задач показывает, что программа забирает 163 МБ. Почему ? ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
01.04.2011, 17:57     Шаблон и выделение памяти #2
При специализации шаблона функция развернётся в следующую:

C++
1
2
3
4
5
double *CreateArray(double *a, int n)
{
    a = new double *[n];
    return a;
}
Таким образом, вы пытаетесь в a, которая имеет тип double *, записать то, что вернёт new, а вернёт он тип double **.
VASSUV
MiThEoN
412 / 278 / 15
Регистрация: 31.10.2009
Сообщений: 414
Записей в блоге: 2
Завершенные тесты: 1
01.04.2011, 18:28     Шаблон и выделение памяти #3
можно так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
template<class T> T* CreateArray(T a, int n)
{
    return new T[n];
}
 
int main()
{
    double*a;
    a = new double;
    int n = 5;
    a = CreateArray(*a,n);
    return 0;
}
или так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
template<class T> T CreateArray(T a, int n)
{
    return (T) malloc(n*sizeof(T*));
}
 
int main()
{
    double*a;
    a = new double;
    int n = 5;
    a = CreateArray(a,n);
    return 0;
}
но почему без 11 строки не работает?
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
01.04.2011, 18:39     Шаблон и выделение памяти #4
Лучше тогда вот так. Только не вижу смысла делать эту бесполезную обёртку.
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
#include <iostream>
 
template< typename T >
T *alloc(size_t size)
{
    return new T [size];
}
 
class Foo
{
};
 
int main()
{
    double *dptr;
    int *iptr;
    Foo *fooptr;
 
    dptr = alloc< double >(10);
    iptr = alloc< int >(10);
    fooptr = alloc< Foo >(10);
 
    delete dptr;
    delete iptr;
    delete fooptr;
 
    return 0;
}
ObiSan
5 / 5 / 0
Регистрация: 08.10.2010
Сообщений: 23
02.04.2011, 12:29  [ТС]     Шаблон и выделение памяти #5
Собственно я остановился на варианте

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template<class T> T* CreateArray(int n)
{
    T* a = new T [n];
    return a;
}
 
int main()
{
    double* a;
    int n = 5;
    a = CreateArray<double>(n);
    return 0;
}
P.S. Проверка на NULL и освобождение это само собой - не о том речь.
P.P.S. Параллельно задал вопрос на басурманском форуме, много интересного узнал =). Если интересно - http://stackoverflow.com/questions/5...ory-allocation
Yandex
Объявления
02.04.2011, 12:29     Шаблон и выделение памяти
Ответ Создать тему
Опции темы

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