Как получить доступ к адресам после выхода из цикла? - PullRequest
0 голосов
/ 01 сентября 2011
#include<iostream>
using namespace std;
struct data {
  int x;
  data *ptr;
};

int main() {
 int i = 0;
  while( i >=3 ) {
    data *pointer = new data;  // pointer points to the address of data
    pointer->ptr = pointer;    // ptr contains the address of pointer
    i++;
  }
 system("pause");
}

Допустим, после итерации 3 раза:

 ptr had address = 100 after first loop
 ptr had address = 200 after second loop
 ptr had address = 300 after third loop

Теперь вопросы:

  1. Существуют ли все три адреса, которые были назначены для ptr, впамять после выхода программы из цикла?
  2. Если да, каков метод доступа к этим адресам после выхода из цикла?

Ответы [ 3 ]

1 голос
/ 01 сентября 2011

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

0 голосов
/ 01 сентября 2011

Для начала, для любого ptr с имеющимся у вас кодом не будет выделяться память.

int i = 0;
while( i >= 3)

Это вообще не будет вводить цикл while.

Однако, если вы ищете доступ к ptr, содержащемуся внутри struct, вы можете попробовать это.Я не уверен, чего вы пытаетесь достичь, назначив ptr с собственным адресом структуры объекта.Программа ниже напечатает значение x и адрес, присвоенный ptr.

#include<iostream>
using namespace std;
struct data {
  int x;
  data *ptr;
};

int main() {
 int i = 0;
 data pointer[4];
  while( i <=3 ) {
    pointer[i].x = i;
    pointer[i].ptr = &pointer[i];  
    i++;
  }

for( int i = 0; i <= 3; i++ )
{
   cout<< pointer[i].x << endl;
   cout<< pointer[i].ptr << endl;
}

}

ВЫХОД:

0
0xbf834e98
1
0xbf834ea0
2
0xbf834ea8
3
0xbf834eb0

Лично, когда я знаю количество итераций Iхочу сделать, я выбираю for циклы и использую while только тогда, когда я ищу итерацию неизвестного числа раз, прежде чем логическое выражение будет удовлетворено.

0 голосов
/ 01 сентября 2011

Я не могу догадаться, чего вы пытаетесь достичь ... Но я думаю, вы пытаетесь добиться подобного этому ... pic

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

#include<iostream.h>
struct data {
  int x;
  data *ptr;
  data()
  {
   x = -1;
   ptr = NULL;
  }
};

data *head = new data();
data *pointer = head;

int main() {
 int i = 0;

  while( i <=3 ) {
    data *pointer = new data();
    pointer->x = /*YOUR DATA*/;
   ::pointer->ptr = pointer;
   ::pointer = pointer;
   i++;
  }

  i=0;
   data* pointer = head->next;
   while( i <=3 ) {
   cout<<pointer->x;
   pointer = pointer->ptr;
   i++;
   }
  system("pause");

}

Это напечатает, элементы в связанном списке;

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