У меня есть функция zap (), написанная для освобождения 1-го массива следующим образом.
void zap(double *(&data))
{
if (data != NULL)
{
delete [] data;
data = NULL;
}
return;
}
У меня сложилось впечатление, что if data != NULL
не будет пытаться освободить память, которая никогда не выделялась, но я думаю, что ошибаюсь. У меня возникла следующая проблема реализации.
void fun()
{
int condition = 0;
double *xvec;
double *yvec;
allocate_memory_using_new(yvec); //a function that allocates memory
if (condition == 1) allocate_memory_using_new(xvec);
//some code
//deallocate memory:
zap (yvec);
zap (xvec); //doesn't work
return;
}
Вывод следующий:
Unhandled exception at 0x6b9e57aa (msvcr100d.dll) in IRASC.exe: 0xC0000005: Access
violation reading location 0xccccccc0.
Так что я понимаю, что нежелательно пытаться вызывать zap, когда очевидно, что указатель никогда не использовался. Мне просто интересно, есть ли способ проверить адрес указателя в какой-то момент в функции zap (), чтобы избежать исключения. Заранее благодарим за помощь и понимание!