我走出循环后如何访问地址?

时间:2011-09-01 04:21:34

标签: c++ pointers

#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 个答案:

答案 0 :(得分:1)

那么内存是保留的,但是你没有指向内存的指针,所以这就是内存泄漏(保留内存但没办法到达它)。你可能想要一个数据数组*来保存这些指针,这样你就可以在完成它们之后删除它们,或者稍后再使用它们。

答案 1 :(得分:0)

我无法猜测你想要实现的目标...... 但我认为,你正在努力实现与此类似的...... 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");

}

这将打印链表中的元素;

答案 2 :(得分:0)

对于初学者来说,没有为你拥有代码的任何ptr分配内存。

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

这根本不会进入while循环。

但是,如果您要访问struct中包含的ptr,那么您可以试试这个。我不确定你要通过为ptr分配自己的struct对象地址来实现什么。以下程序将打印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

就个人而言,当我知道我想要做的迭代次数时,我选择for循环并且只有在我想要在满足逻辑表达式之前迭代未知次数时才使用while