开发者

How to access the addresses after i get out of the loop?

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

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

Let us assume after iterating 3 times :

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

Now the questions are :

  1. Do all the three addresses that were being assigned to ptr exist in the memory after the program gets out of the loop ?
  2. If yes , what is the method to access these addresses after i get out of the loop ?


Well the memory is reserved but you have no pointer to the memory so that's whats called a memory leak (reserved memory but no way to get to it). You may want to have an array of data* to save these pointers so you can delete them when you are done with them or use them later.


For starters, there will be no memory allocated for any ptr with the code you have.

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

This will not enter the while loop at all.

However, if you are looking to access the ptr contained inside the struct then you can try this. I am not sure what you are trying to achieve by assigning the ptr with its own struct object address. The program below will print the value of x and the address assigned to 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;
}

}

OUTPUT:

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

Personally, when I know the number of iterations I want to do, I choose for loops and I use while only when I am looking to iterate unknown number of times before a logical expression is satisfied.


I cannot guess what you are trying to achieve... But Me thinks, you are trying to achieve similar to this....

How to access the addresses after i get out of the loop?

But, If you want to make linked list using your implementation, you can try this...

#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");

}

This will print , the elements in the linked list;

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜