#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
现在的问题是:
答案 0 :(得分:1)
那么内存是保留的,但是你没有指向内存的指针,所以这就是内存泄漏(保留内存但没办法到达它)。你可能想要一个数据数组*来保存这些指针,这样你就可以在完成它们之后删除它们,或者稍后再使用它们。
答案 1 :(得分:0)
我无法猜测你想要实现的目标...... 但我认为,你正在努力实现与此类似的......
但是,如果你想使用你的实现创建链表,你可以尝试这个......
#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