www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - D bug? or user error?

reply clayasaurus <clayasaurus_member pathlink.com> writes:
hi, i'm getting seg faults with the following program code.
i'm using Slack 9 linux with dmd v0.89.
I type dmd bug.d, it compiles, and when i run the program ./bug
I get the following output...

"bug: before crash
Segmentation fault"

the things is, I can't possibly understand what I'm doing wrong. 
If I am doing something wrong, can someone please point it out to me? 
or have I discovered a D bug? 

thx. 
- clayasaurus

/////////////////////////////////////////////////////////////////////////////
// bug.d - is this my error? or some D bug?

class cNew
{
public:
void set(float num)
{
m_x = m_y = m_z = num;
assert(m_x == m_y == m_z == num);
}


private:
float m_x, m_y, m_z;
}

class cCrash
{
public:
this()
{
m_new.set(0); // is this so harmful?
}

private:
cNew m_new;
}

int main(char[][] argv)
{

printf("bug: before crash\n");
cCrash crash = new cCrash(); // <-- it must crash in here...
printf("bug: after crash\n"); // note: it Seg faults before it gets here on
Slack 9 linux

return 0;
}

// end
/////////////////////////////////////////////////////////////////////////////
May 20 2004
parent reply Andy Friesen <andy ikagames.com> writes:
clayasaurus wrote:

 class cNew
 {
 public:
 void set(float num)
 {
 m_x = m_y = m_z = num;
 assert(m_x == m_y == m_z == num);
 }
 
 
 private:
 float m_x, m_y, m_z;
 }
 
 class cCrash
 {
 public:
 this()
 {
m_new is a null reference. You need to allocate a cNew first.
 m_new.set(0); // is this so harmful?
 }
 
 private:
 cNew m_new;
 }
Maybe if this problem pops up on the newsgroup enough, Walter will cave and make the compiler check. :) -- andy
May 20 2004
next sibling parent clayasaurus <clayasaurus_member pathlink.com> writes:
oh ok, hehe. Well, that's cool, simple, elegant D at it again *doh!* 

In article <c8jj0r$plo$1 digitaldaemon.com>, Andy Friesen says...
clayasaurus wrote:
 
 class cCrash
 {
 public:
 this()
 {
m_new is a null reference. You need to allocate a cNew first.
 m_new.set(0); // is this so harmful?
 }
 
 private:
 cNew m_new;
 }
Maybe if this problem pops up on the newsgroup enough, Walter will cave and make the compiler check. :) -- andy
May 20 2004
prev sibling next sibling parent DemmeGod <me demmegod.com> writes:
A compiler check would certainly make it easier for C++ guys to adopt D,
Walter. :)

On Thu, 20 May 2004 17:41:07 -0700, Andy Friesen wrote:

 clayasaurus wrote:
 
 class cNew
 {
 public:
 void set(float num)
 {
 m_x = m_y = m_z = num;
 assert(m_x == m_y == m_z == num);
 }
 }
 
 private:
 float m_x, m_y, m_z;
 }
 }
 class cCrash
 {
 public:
 this()
 {
m_new is a null reference. You need to allocate a cNew first.
 m_new.set(0); // is this so harmful?
 }
 }
 private:
 cNew m_new;
 }
 }
Maybe if this problem pops up on the newsgroup enough, Walter will cave and make the compiler check. :) -- andy
May 20 2004
prev sibling parent J C Calvarese <jcc7 cox.net> writes:
Andy Friesen wrote:

 clayasaurus wrote:
 
 class cNew
 {
 public:
 void set(float num)
 {
 m_x = m_y = m_z = num;
 assert(m_x == m_y == m_z == num);
 }


 private:
 float m_x, m_y, m_z;
 }

 class cCrash
 {
 public:
 this()
 {
m_new is a null reference. You need to allocate a cNew first.
 m_new.set(0); // is this so harmful?
 }

 private:
 cNew m_new;
 }
Maybe if this problem pops up on the newsgroup enough, Walter will cave and make the compiler check. :) -- andy
For what it's worth (probably not much), I've already put this error on my list of common errors: http://www.wikiservice.at/d/wiki.cgi?ErrorMessages#Un-initializedObject -- Justin (a/k/a jcc7) http://jcc_7.tripod.com/d/
May 20 2004