Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Good resource for learning pointers

Reply
Thread Tools

Good resource for learning pointers

 
 
JoeC
Guest
Posts: n/a
 
      01-12-2007
I understand the basics of pointers, they point to memory locations. I
would like to know resources for learning all about poters. I am
having some problems erasing elements of pointers from a vector. I
wold like to know where I can get some in depth information on how to
use pointers in various situations. It seems that all most books have
to say about pointers is that they point to memory locations. Some
even say they are read/write iterators for arrays. I am using pointers
refrences and handles, most of the time I get the syntax correct but I
have a problem in a complex program and I cant figure out what the
problem is:

I created a handle to contor my dynamicly binded units and I need
pointer to these handles to work in the space holder object in my map
manager for this game.

bool spaceholder::kill(){
std::vector<hunit*>::iterator itr = u.begin();
if(!u.empty()){
while(itr != u.end()){
if((*itr)->marked()){
itr = u.erase(itr);
kill = true;
}++itr;

}
}
}

 
Reply With Quote
 
 
 
 
Mike Wahler
Guest
Posts: n/a
 
      01-12-2007

"JoeC" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed) ups.com...
>I understand the basics of pointers, they point to memory locations.


The contain address values which represent memory locations.

> I
> would like to know resources for learning all about poters.


I find this one reasonable:
http://pw1.netcom.com/~tjensen/ptr/pointers.htm
Note: it's in the context of C, but it works the
same as C++, except for the 'void*' automatic
conversion.

But after looking at your code, I don't think your
trouble (if I've correctly guessed what it is),
has to do with pointers, but with iterators.

> I am
> having some problems erasing elements of pointers from a vector.


Specifically what problems?

> I
> wold like to know where I can get some in depth information on how to
> use pointers in various situations.


Good textbooks (see www.accu.org) or see link above.

> It seems that all most books have
> to say about pointers is that they point to memory locations.


Which books?

> Some
> even say they are read/write iterators for arrays.


That's a reasonable description of one thing they
could be used for.

> I am using pointers
> refrences and handles,


'handle' is a term not defined by the C++ language, but
the 'handle' abstraction is often implemented as a pointer.

> most of the time I get the syntax correct but I
> have a problem in a complex program and I cant figure out what the
> problem is:


You still haven't described your problem, but looking at your code,
and making a couple assumptions, I can guess what the trouble is.

>
> I created a handle to contor my dynamicly binded units and I need
> pointer to these handles to work in the space holder object in my map
> manager for this game.
>
> bool spaceholder::kill(){
> std::vector<hunit*>::iterator itr = u.begin();
> if(!u.empty()){
> while(itr != u.end()){


Aside:
If begin() == end() then the container is empty,
so the test for !empty() is redundant.

> if((*itr)->marked()){


Is type 'hunit' an iterator or pointer to a struct/class, or does it
overload the '->' operator? If not, this syntax is incorrect.
I'll go ahead and assume that the answer to this question is yes.

> itr = u.erase(itr);


This is probably your problem. vector.erase() returns an
iterator to the element beyond the one erased. If you've
just erased the last element, this returned iterator will
be 'end()', in which case ...

> kill = true;


> }++itr;


.... this line would cause 'itr' to increment past 'end()',
producing undefined behavior. Was the problem a crash,
or 'segfault', or 'access violation' or similar?

>
> }
> }
> }


Try:

bool spaceholder::kill(){
std::vector<hunit*>::iterator itr = u.begin();
while(itr != u.end()){
if((*itr)->marked()){
itr = u.erase(itr);
kill = true;
continue; /* new line */
}++itr;
}
}

If this does not solve your problem, you'll need to give
more specific information, ideally including a complete,
compilable example which exhibits the problem.

-Mike


 
Reply With Quote
 
 
 
 
red floyd
Guest
Posts: n/a
 
      01-12-2007
Mike Wahler wrote:
> "JoeC" <(E-Mail Removed)> wrote in message
> [redacted]
>>
>> bool spaceholder::kill(){
>> std::vector<hunit*>::iterator itr = u.begin();
>>
>> [redacted]


>> if((*itr)->marked()){

>
> Is type 'hunit' an iterator or pointer to a struct/class, or does it
> overload the '->' operator? If not, this syntax is incorrect.
> I'll go ahead and assume that the answer to this question is yes.


You're mistaken. itr is an iterator into a vector of hunit*. Therefore
(*itr) refer to an hunit*, and by definition, -> is defined. The syntax
is *always* correct here.
 
Reply With Quote
 
Marcus Kwok
Guest
Posts: n/a
 
      01-12-2007
JoeC <(E-Mail Removed)> wrote:
> I understand the basics of pointers, they point to memory locations. I
> would like to know resources for learning all about poters. I am
> having some problems erasing elements of pointers from a vector. I
> wold like to know where I can get some in depth information on how to
> use pointers in various situations.


Alf P. Steinbach's tutorial has lots of great information on pointers:

http://home.no.net/dubjai/win32cpptu...ters/ch_01.pdf

--
Marcus Kwok
Replace 'invalid' with 'net' to reply
 
Reply With Quote
 
Daniel T.
Guest
Posts: n/a
 
      01-13-2007
JoeC wrote:

> bool spaceholder::kill(){
> std::vector<hunit*>::iterator itr = u.begin();
> if(!u.empty()){
> while(itr != u.end()){
> if((*itr)->marked()){
> itr = u.erase(itr);
> kill = true;
> }++itr;
>
> }
> }
> }


bool spaceholder::kill() {
std::vector<hunit*>::iterator itr = u.begin();
while ( itr != u.end() ) {
if ( (*itr)->marked() ) {
// you probably need to do something here to destroy the
hunit contained,
// unless some other pointer also points to is
itr = u.erase( itr );
kill = true;
}
else {
++itr;
}
}
}

 
Reply With Quote
 
Mike Wahler
Guest
Posts: n/a
 
      01-13-2007

"red floyd" <(E-Mail Removed)> wrote in message
news:3wOph.58340$(E-Mail Removed). net...
> Mike Wahler wrote:
>> "JoeC" <(E-Mail Removed)> wrote in message [redacted]
>>>
>>> bool spaceholder::kill(){
>>> std::vector<hunit*>::iterator itr = u.begin();
>>> [redacted]

>
>>> if((*itr)->marked()){

>>
>> Is type 'hunit' an iterator or pointer to a struct/class, or does it
>> overload the '->' operator? If not, this syntax is incorrect.
>> I'll go ahead and assume that the answer to this question is yes.

>
> You're mistaken. itr is an iterator into a vector of hunit*. Therefore
> (*itr) refer to an hunit*, and by definition, -> is defined. The syntax
> is *always* correct here.


You're right, of course. Joe, sorry for the misinformation.

-Mike


 
Reply With Quote
 
JoeC
Guest
Posts: n/a
 
      01-14-2007

Mike Wahler wrote:
> "JoeC" <(E-Mail Removed)> wrote in message
> news:(E-Mail Removed) ups.com...
> >I understand the basics of pointers, they point to memory locations.

>
> The contain address values which represent memory locations.
>
> > I
> > would like to know resources for learning all about poters.

>
> I find this one reasonable:
> http://pw1.netcom.com/~tjensen/ptr/pointers.htm
> Note: it's in the context of C, but it works the
> same as C++, except for the 'void*' automatic
> conversion.
>

Thanks, I will check it out. I have a specific problem that I think I
fixed but I would like to learn more about pointers and refrences
because there are times when I have trouble with them.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
pointers, pointers, pointers... cerr C Programming 12 04-07-2011 11:17 PM
Very annoying error: Access to the path is denied. ASP.NET is not authorized to access the requested resource. Consider granting access rights to the resource to the ASP.NET request identity Jay ASP .Net 2 08-20-2007 07:38 PM
Resource manager problem: naming for embedded resource. Dirc Khan-Evans ASP .Net 1 10-17-2005 12:52 PM
Learning pointers and arrays of pointers With Files ketema@gmail.com C Programming 1 03-28-2005 03:51 AM
The system cannot locate the resource specified. Error processing resource avishosh XML 2 08-08-2004 06:28 AM



Advertisments