Re: Basic, but what the hell am I doing wrong here?

From: Simon Kitching (simon_at_ecnetwork.co.nz)
Date: 06/11/04

  • Next message: Brent Miller: "Re: Basic, but what the hell am I doing wrong here?"
    To: debian-user@lists.debian.org
    Date: Fri, 11 Jun 2004 14:59:18 +1200
    
    

    On Fri, 2004-06-11 at 14:49, Kevin Mark wrote:
    > On Thu, Jun 10, 2004 at 09:36:04PM -0400, Stephen Touset wrote:
    > > I've opened and read files hundreds of times in my life. What gives now?
    > >
    > > --
    > > Stephen Touset <stephen@touset.org>
    >
    > > #include <fstream>
    > >
    > > using namespace std;
    > >
    > > int main(void)
    > > {
    > >
    > > ifstream fin("test.cc");
    > > char* str;
    > >
    > > if (!fin.is_open())
    > > {
    > > exit(1);
    > > }
    > >
    > > while (!fin.eof())
    > > {
    > > fin.getline(str, 80);
    > > }
    > >
    > > fin.close();
    > >
    > > return 0;
    > >
    > > }
    > Hi Stephen,
    > I can understand your confusion. you have a perception issue that is
    > clouding your understanding. either that or you have been looking at
    > this for umteen hours and too much caffine x-). The issue is the
    > understading of memory allocation versus pointer definition.
    >
    > 'char * str' defines a 'char *' called str. it allocates memory for this
    > pointer. so, str has an address of 0xabcd (for example). It has not been
    > initialized with anything, so it contains undeterminate data (eg.
    > garbage). lets say it the contents of address 0xabcd is 'Z'. so, *str =
    > 'Z'. What does *(str + 1) contain? undeterminate data. As does *(str +
    > 2) ... *(str + 79). So you define str, don't initialize it and then read
    > data into *(str) ... *(str + 79). Well not really, becase you have no
    > right to write to those areas. Why? because you have not allocate memory
    > at those addresses. How do you do this? well in c you'd 'malloc. But
    > this is c++, so, you'd use 'new', I think.

    Yep. or:
      char str[80];

    And in c++, there probably is a way to read directly into a string or
    stringstream object or similar, which is much safer (and easier) than
    calling malloc or new.

    (damn; it's been about 5 years since I last seriously used c++ and it's
    all forgotten...)

    Regards,

    Simon

    -- 
    To UNSUBSCRIBE, email to debian-user-REQUEST@lists.debian.org 
    with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
    

  • Next message: Brent Miller: "Re: Basic, but what the hell am I doing wrong here?"

    Relevant Pages


    Loading