473,324 Members | 2,239 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,324 software developers and data experts.

simple question.

what am I doing wrong here. on a 64 bit m/c if I just do g++ t.cpp
everything works find. if I do g++ -m32 t.cpp it just breaks.
====================
#include <iostream>

static int mcount = 0;
using namespace std;
class Base
{
public:
Base( int i, int j) { cout <<i<<"\t"<<j<<endl; };
virtual ~Base() { };
virtual void hui() { cout <<"hello world"<<endl; };
protected:
int temp12;
};

class Child : public Base
{
public:
Child(int i, int j) : Base(i,j) {};
~Child() {};
virtual void hui() { cout <<"world hello world"<<endl; };
protected:
int temp23;
};

int main(int argc, char **argv)
{
Base *temp = new Child [16384] (3, 2);
temp[0].hui();

delete [] temp;
}

Aug 10 '07 #1
6 1279
forgot to mention, The breakage is at the line where

Base *temp = new child[16385] (3, 2);

and then delete [] temp;- <--- crash

if temp is a child pointer everything is ok.

On Aug 10, 4:34 pm, "raghuv...@gmail.com" <raghuv...@gmail.comwrote:
what am I doing wrong here. on a 64 bit m/c if I just do g++ t.cpp
everything works find. if I do g++ -m32 t.cpp it just breaks.
====================
#include <iostream>

static int mcount = 0;
using namespace std;
class Base
{
public:
Base( int i, int j) { cout <<i<<"\t"<<j<<endl; };
virtual ~Base() { };
virtual void hui() { cout <<"hello world"<<endl; };
protected:
int temp12;

};

class Child : public Base
{
public:
Child(int i, int j) : Base(i,j) {};
~Child() {};
virtual void hui() { cout <<"world hello world"<<endl; };
protected:
int temp23;

};

int main(int argc, char **argv)
{
Base *temp = new Child [16384] (3, 2);
temp[0].hui();

delete [] temp;

}

Aug 10 '07 #2
one more information
g++ -v
=====
Reading specs from /usr/lib/gcc-lib/x86_64-redhat-linux/3.2.3/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --
infodir=/usr/share/info --enable-shared --enable-threads=posix --
disable-checking --with-system-zlib --enable-__cxa_atexit --
host=x86_64-redhat-linux
Thread model: posix
gcc version 3.2.3 20030502 (Red Hat Linux 3.2.3-54)
On Aug 10, 4:36 pm, "raghuv...@gmail.com" <raghuv...@gmail.comwrote:
forgot to mention, The breakage is at the line where

Base *temp = new child[16385] (3, 2);

and then delete [] temp;- <--- crash

if temp is a child pointer everything is ok.

On Aug 10, 4:34 pm, "raghuv...@gmail.com" <raghuv...@gmail.comwrote:
what am I doing wrong here. on a 64 bit m/c if I just do g++ t.cpp
everything works find. if I do g++ -m32 t.cpp it just breaks.
====================
#include <iostream>
static int mcount = 0;
using namespace std;
class Base
{
public:
Base( int i, int j) { cout <<i<<"\t"<<j<<endl; };
virtual ~Base() { };
virtual void hui() { cout <<"hello world"<<endl; };
protected:
int temp12;
};
class Child : public Base
{
public:
Child(int i, int j) : Base(i,j) {};
~Child() {};
virtual void hui() { cout <<"world hello world"<<endl; };
protected:
int temp23;
};
int main(int argc, char **argv)
{
Base *temp = new Child [16384] (3, 2);
temp[0].hui();
delete [] temp;
}

Aug 10 '07 #3
ra*******@gmail.com wrote:
:: forgot to mention, The breakage is at the line where
::
:: Base *temp = new child[16385] (3, 2);
::
:: and then delete [] temp;- <--- crash
::
:: if temp is a child pointer everything is ok.

You have answered it yourself! :-)

The type of the pointer passed to delete[] must be the same as the one
returned from new[].

C style arrays are not polymorphic, and can't be used this way.
::
:: On Aug 10, 4:34 pm, "raghuv...@gmail.com" <raghuv...@gmail.com>
:: wrote:
::: what am I doing wrong here. on a 64 bit m/c if I just do g++
::: t.cpp everything works find. if I do g++ -m32 t.cpp it just
::: breaks. ====================
::: #include <iostream>
:::
::: static int mcount = 0;
::: using namespace std;
::: class Base
::: {
::: public:
::: Base( int i, int j) { cout <<i<<"\t"<<j<<endl; };
::: virtual ~Base() { };
::: virtual void hui() { cout <<"hello world"<<endl; };
::: protected:
::: int temp12;
:::
::: };
:::
::: class Child : public Base
::: {
::: public:
::: Child(int i, int j) : Base(i,j) {};
::: ~Child() {};
::: virtual void hui() { cout <<"world hello world"<<endl; };
::: protected:
::: int temp23;
:::
::: };
:::
::: int main(int argc, char **argv)
::: {
::: Base *temp = new Child [16384] (3, 2);
::: temp[0].hui();

This isn't really working either. Don't try temp[1].hui() !!

:::
::: delete [] temp;
:::
::: }

Bo Persson
Aug 10 '07 #4
ra*******@gmail.com wrote:
int main(int argc, char **argv)
{
Base *temp = new Child [16384] (3, 2);
You have a number of problems here. First, you can't pass initializers
to array_new. Second converting the array of CHILD to array of BASE
is bogus. It's an annoying quirk of the language that it even lets
you do that conversion. Anything other than temp[0] is INVALID.
temp[0].hui();

delete [] temp;
}
You must pass the delete [] the EXACT same value and type you got
from new [].

Base class versions can only be passed to the non-array delete (and
only then if the base class has a virtual destructor).
Aug 10 '07 #5
On Aug 11, 2:56 am, Ron Natalie <r...@spamcop.netwrote:
raghuv...@gmail.com wrote:
int main(int argc, char **argv)
{
Base *temp = new Child [16384] (3, 2);

You have a number of problems here. First, you can't pass initializers
to array_new. Second converting the array of CHILD to array of BASE
is bogus. It's an annoying quirk of the language that it even lets
you do that conversion. Anything other than temp[0] is INVALID.
temp[0].hui();
delete [] temp;
}

You must pass the delete [] the EXACT same value and type you got
from new [].

Base class versions can only be passed to the non-array delete (and
only then if the base class has a virtual destructor).

I agree with both Ron and Bo... i agree with what they say...
but just wondering about Raghu's statement:
>on a 64 bit m/c if I just do g++ t.cpp everything works fine
are the standards different for 64 bit systems (not as far as i
know)... any ideas from ppl out there?
Aug 11 '07 #6
On 2007-08-11 17:38:39 -0400, "ar********@gmail.com"
<ar********@gmail.comsaid:
On Aug 11, 2:56 am, Ron Natalie <r...@spamcop.netwrote:
>raghuv...@gmail.com wrote:
>>int main(int argc, char **argv)
{
Base *temp = new Child [16384] (3, 2);

You have a number of problems here. First, you can't pass initializers
to array_new. Second converting the array of CHILD to array of BASE
is bogus. It's an annoying quirk of the language that it even lets
you do that conversion. Anything other than temp[0] is INVALID.
>>temp[0].hui();
>>delete [] temp;
}

You must pass the delete [] the EXACT same value and type you got
from new [].

Base class versions can only be passed to the non-array delete (and
only then if the base class has a virtual destructor).


I agree with both Ron and Bo... i agree with what they say...
but just wondering about Raghu's statement:
>>on a 64 bit m/c if I just do g++ t.cpp everything works fine

are the standards different for 64 bit systems (not as far as i
know)... any ideas from ppl out there?
The C++ standard doesn't distinguish between 64-bit systems and any
other systems: the behavior on all systems is undefined. Anything can
happen, including "works fine" for some unstated meaning of "fine".

--
Pete
Roundhouse Consulting, Ltd. (www.versatilecoding.com) Author of "The
Standard C++ Library Extensions: a Tutorial and Reference
(www.petebecker.com/tr1book)

Aug 11 '07 #7

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

3
by: Patchwork | last post by:
Hi Everyone, Please take a look at the following (simple and fun) program: //////////////////////////////////////////////////////////////////////////// ///////////// // Monster Munch, example...
1
by: Proteus | last post by:
Any help appreciated on a small perl project I need to write for educator/teaching purposes. I have not programmed perl for some time, need to get up to speed, maybe some kind souls hrere will help...
2
by: Raskolnikow | last post by:
Hi! I have a very simple problem with itoa() or the localtime(...). Sorry, if it is too simple, I don't have a proper example. Please have a look at the comments. struct tm *systime; time_t...
3
by: Peter | last post by:
Hello Thanks for reviewing my question. I would like to know how can I programmatically select a node Thanks in Advanc Peter
7
by: abcd | last post by:
I am trying to set up client machine and investigatging which .net components are missing to run aspx page. I have a simple aspx page which just has "hello world" printed.... When I request...
4
by: dba_222 | last post by:
Dear Experts, Ok, I hate to ask such a seemingly dumb question, but I've already spent far too much time on this. More that I would care to admit. In Sql server, how do I simply change a...
14
by: Giancarlo Berenz | last post by:
Hi: Recently i write this code: class Simple { private: int value; public: int GiveMeARandom(void);
30
by: galiorenye | last post by:
Hi, Given this code: A** ppA = new A*; A *pA = NULL; for(int i = 0; i < 10; ++i) { pA = ppA; //do something with pA
10
by: Phillip Taylor | last post by:
Hi guys, I'm looking to develop a simple web service in VB.NET but I'm having some trivial issues. In Visual Studio I create a web services project and change the asmx.vb file to this: Imports...
17
by: Chris M. Thomasson | last post by:
I use the following technique in all of my C++ projects; here is the example code with error checking omitted for brevity: _________________________________________________________________ /*...
0
by: DolphinDB | last post by:
Tired of spending countless mintues downsampling your data? Look no further! In this article, you’ll learn how to efficiently downsample 6.48 billion high-frequency records to 61 million...
0
by: ryjfgjl | last post by:
ExcelToDatabase: batch import excel into database automatically...
0
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
1
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
0
by: jfyes | last post by:
As a hardware engineer, after seeing that CEIWEI recently released a new tool for Modbus RTU Over TCP/UDP filtering and monitoring, I actively went to its official website to take a look. It turned...
0
by: ArrayDB | last post by:
The error message I've encountered is; ERROR:root:Error generating model response: exception: access violation writing 0x0000000000005140, which seems to be indicative of an access violation...
1
by: Defcon1945 | last post by:
I'm trying to learn Python using Pycharm but import shutil doesn't work
1
by: Shællîpôpï 09 | last post by:
If u are using a keypad phone, how do u turn on JavaScript, to access features like WhatsApp, Facebook, Instagram....
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome former...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.