Безопасно ли удалять указатель массива в C ++ после переназначения? - PullRequest
0 голосов
/ 23 января 2019

Предположим, я хотел бы поменять два указателя массива в C ++, которые я выделил с new [] и разной длины. Безопасно ли delete [] их после замены? Что если они имеют одинаковую длину?

int *a;
int *b;
int *tmp;

a = new int[5];
b = new int[10];
tmp = a;
a = b;
b = tmp;

delete [] a;
delete [] b;

Ответы [ 3 ]

0 голосов
/ 23 января 2019

Да, вы, безусловно, можете удалить указатель, как только ваш обмен будет сделан.Поскольку вам больше не нужно указывать массив, так что в этом случае его можно безопасно удалить после замены.

int *a;
int *b;
int *tmp;

a = new int[5];
b = new int[10];
tmp = a;
a = b;
b = tmp;

delete [] a;
delete [] b;

И это правильный способ сделать это.Отличная работа

0 голосов
/ 23 января 2019

Да, вы можете. Причина в том, что информация, необходимая для точного освобождения этой памяти, управляется свободным хранилищем (куча в большинстве случаев). Так что он знает, как удалить на основе адреса, а не переменной. Часто эта информация хранится в *(ptr - x), где x - размер данных отслеживания.

0 голосов
/ 23 января 2019

Безопасно ли удалять [] их после замены?

Да.

Что, если они имеют одинаковую длину?

Длина не имеет значения.

...