область указателей на (локальные) объекты, объявленные в цикле for - PullRequest
2 голосов
/ 10 октября 2010

Я не уверен, является ли приведенный ниже фрагмент кода C ++ законным или нет:

std::vector<int*> myints;
for (int i = 0; i<N; i++) {
   int j = i;
   myints.push_back(&j);
 }

 for (int i=0; i<myints.size(); i++) cout<<*(myints[i])<<endl;

Как компилятор справляется с этим?Я понимаю, что переменная j сама выходит из области видимости при выходе из цикла for, но будет целое число локально распределено N раз в стеке, так что объекты int, на которые указывают элементы в векторе, остаются действительными внепетля?

Большое спасибо!-берт

Ответы [ 2 ]

1 голос
/ 10 октября 2010

Как только блок заканчивается, компилятор перестает заботиться о памяти, которая была ранее зарезервирована для него. Но даже если ничто иное не нарушает этого, у вас есть другая проблема: все int* в vector<int*> указывают на одну и ту же ячейку памяти, поэтому все они имеют окончательное значение i.

0 голосов
/ 10 октября 2010

Ответ зависит (как обычно) от реализации компилятора.

Вы, вероятно, получите все указатели, указывающие на одно и то же местоположение с последним значением N в указанном направлении.

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