Как вместо malloc применить new?
Динамический массив не подходит, поскольку заранее неизвестно сколько памяти выделять. Для этого можно было б использовать "вектор", но толком не разобравшись с ним я нашел в книге конструкцию, которая называется "Односвязный список, элементами которого есть структуры" (это чисто Сишный подход, без плюсов). Но мне главное чтоб работало...
Сначала обьявляю структуру:
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)'
Как сделать чтоб работало?
Цитата:
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)'
Как сделать чтоб работало?
Я работаю над алгоритмом обхода контура, кусок кода отвечающий именно за обход уже написан и работает. Теперь мне нужно не только обойти контур, но и в процессе обхода запоминать координаты точек контура.
Динамический массив не подходит, поскольку заранее неизвестно сколько памяти выделять. Для этого можно было б использовать "вектор", но толком не разобравшись с ним я нашел в книге конструкцию, которая называется "Односвязный список, элементами которого есть структуры" (это чисто Сишный подход, без плюсов). Но мне главное чтоб работало...
Сначала обьявляю структуру:
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;
Цитата:
Originally posted by vitaly2003s
Напиши:
Current=new Pixel;
Напиши:
Current=new Pixel;
Благодарю, это заработало. Но культурное программирование подразумевает что нужно удалить то что ранее выделил :-) поэтому вопрос-продолжение:
Если я сформировал список из структур типа
struct Pixel {
int XCoord;
int YCoord;
struct Pixel *PointerToPixel;
};
то как мне применить к каждой ячейке списка операцию delete? Как я понял, удалять нужно начиная с конца, потому что если удалять с первого элемента, то мы сразу удалим указатель PointerToPixel указывающий на следующую ячейку и потеряем память.
#include <list>
typedef struct
{
int XCoord;
int YCoord;
}TPixel;
std::list< TPixel > MyList;
TPixel MyPixel;
MyList.push_back(MyPixel); // Вставляет в конец
MyList.clear() // Удаляет все элементы списка
Посмотри док.
IMHO эта конструкция решает твой проблемы