Я хотел бы знать, могу ли я сделать это с помощью функции Idle(), которая вызывается несколько раз в программе opengl. Это нормально или я получу память утечка?Объявить указатель внутри функции, которая вызывается несколько раз
void Idle()
{
//PXCPointF32 is a struct
PXCPointF32 *uvmap=0;
uvmap=new PXCPointF32[640*480];
if(uvmap!=NULL)
{
//do some processing
//fill uvmap values
}
if (uvmap)
{
delete[] uvmap;
uvmap=NULL;
}
}
Это нормально, но мне не нравится ваша несогласованность: '0' /' NULL' (используйте 'nullptr'),' if (uvmap! = NULL) 'такое же, как' if (uvmap) '. Вторая версия предпочтительна, поскольку указатели неявно конвертируются в 'bool'. Вам также не нужно устанавливать 'uvmap' в' NULL' после освобождения памяти, так как она локальная. – LogicStuff
Да, вы можете это сделать, но * why *? 'std :: vector uvmap (640 * 480);', затем используйте 'uvmap []' по мере необходимости. И так как это обратный вызов, я * сильно * советую вам попробовать-catch для 'const std :: exception &'. Вы не хотите, чтобы отказ распределения (или любая другая производная от std :: exception) возвращался к неизвестному коду. Подробнее о кодировании читайте здесь [RAII здесь] (http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization). –
WhozCraig
Потому что в дальнейшем SDK, который я использую, имеет функцию, которая принимает в качестве аргумента указатель на PXCPointF32 и заполняет uvmap. Что я там делаю, если я использую вектор? Я просто передаю указатель на первый элемент вектора? – mariosbikos