Зачем увеличивать указатель в случае сбоя? - PullRequest
0 голосов
/ 28 октября 2018

Я узнал о выделении и освобождении memroy в программировании на c ++. Я пытался увеличить мой указатель, а затем использовать delete.оно сломалось !почему это происходит?

int *pint = new int ;
double *pDouble = new double;

*pint = 3;
*pDouble = 3.5; 

pint++;
pDouble++;

delete pint;
delete pDouble;

1 Ответ

0 голосов
/ 28 октября 2018

Проблема

int *pint = new int ;

Динамически выделяет один int.Позже,

pint++;

Увеличивает указатель, а не значение.При увеличении указателя указатель увеличивается на один элемент, поэтому pint++ увеличивает адрес в pint на один int, чтобы указывать на границы того, что было выделено.Попытка получить доступ или delete к тому, на что указывает, вызовет неопределенное поведение и, скорее всего, приведет к аварийному завершению программы.

pDouble++;

имеет тот же эффект, но переходит к следующему double.

Решение

Нет другого решения, кроме как не делать этого.Если вам нужно увеличить указатель, например, для перебора массива, сохраните указатель на исходный адрес, чтобы вы могли освободить его, когда закончите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...