Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как вместо malloc применить new?

1.8K
08 декабря 2005 года
Andreww
81 / / 02.01.2004
Я работаю над алгоритмом обхода контура, кусок кода отвечающий именно за обход уже написан и работает. Теперь мне нужно не только обойти контур, но и в процессе обхода запоминать координаты точек контура.
Динамический массив не подходит, поскольку заранее неизвестно сколько памяти выделять. Для этого можно было б использовать "вектор", но толком не разобравшись с ним я нашел в книге конструкцию, которая называется "Односвязный список, элементами которого есть структуры" (это чисто Сишный подход, без плюсов). Но мне главное чтоб работало...

Сначала обьявляю структуру:

struct Pixel {
int XCoord;
int YCoord;
bool EndOfContour;
struct Pixel *PointerToPixel;
};

Потом указатели для перебора элементов списка:

struct Pixel *Current;
struct Pixel *Begin=NULL;
struct Pixel *End=NULL;

Потом когда найден пиксель, который нужно добавить к списку, я выделяю для него память:

Current=(struct Pixel*)malloc(sizeof(struct Pixel));

Это работает. Но хотелось-бы выделять память используя new. И когда я пишу:

Current=(struct Pixel*)new(sizeof(struct Pixel));

И получаю сообщения об ошибках: Type name expected и Could not find match for 'operator new(unsigned int, unsigned int)'

Как сделать чтоб работало?
406
08 декабря 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by Andreww
Я работаю над алгоритмом обхода контура, кусок кода отвечающий именно за обход уже написан и работает. Теперь мне нужно не только обойти контур, но и в процессе обхода запоминать координаты точек контура.
Динамический массив не подходит, поскольку заранее неизвестно сколько памяти выделять. Для этого можно было б использовать "вектор", но толком не разобравшись с ним я нашел в книге конструкцию, которая называется "Односвязный список, элементами которого есть структуры" (это чисто Сишный подход, без плюсов). Но мне главное чтоб работало...

Сначала обьявляю структуру:

struct Pixel {
int XCoord;
int YCoord;
bool EndOfContour;
struct Pixel *PointerToPixel;
};

Потом указатели для перебора элементов списка:

struct Pixel *Current;
struct Pixel *Begin=NULL;
struct Pixel *End=NULL;

Потом когда найден пиксель, который нужно добавить к списку, я выделяю для него память:

Current=(struct Pixel*)malloc(sizeof(struct Pixel));

Это работает. Но хотелось-бы выделять память используя new. И когда я пишу:

Current=(struct Pixel*)new(sizeof(struct Pixel));

И получаю сообщения об ошибках: Type name expected и Could not find match for 'operator new(unsigned int, unsigned int)'

Как сделать чтоб работало?



Напиши:
Current=new Pixel;

1.8K
12 декабря 2005 года
Andreww
81 / / 02.01.2004
Цитата:
Originally posted by vitaly2003s
Напиши:
Current=new Pixel;



Благодарю, это заработало. Но культурное программирование подразумевает что нужно удалить то что ранее выделил :-) поэтому вопрос-продолжение:

Если я сформировал список из структур типа
struct Pixel {
int XCoord;
int YCoord;
struct Pixel *PointerToPixel;
};

то как мне применить к каждой ячейке списка операцию delete? Как я понял, удалять нужно начиная с конца, потому что если удалять с первого элемента, то мы сразу удалим указатель PointerToPixel указывающий на следующую ячейку и потеряем память.

2.4K
12 декабря 2005 года
dinasok51
219 / / 12.11.2005
Список реализован в STL

#include <list>

typedef struct
{
int XCoord;
int YCoord;
}TPixel;

std::list< TPixel > MyList;
TPixel MyPixel;

MyList.push_back(MyPixel); // Вставляет в конец


MyList.clear() // Удаляет все элементы списка

Посмотри док.
IMHO эта конструкция решает твой проблемы
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог