Re: "delete" causes prog to crash!
- From: "Bob Milton" <DocBob1945@xxxxxxxxxxxxxxxx>
- Date: Tue, 9 Aug 2005 11:38:28 -0700
Robby,
The problem is the statement:
pTempVal = &alarmCode;
This resets the address in pTempVal to the address of a stack variable.
These cannot be deleted! If you just do
pTempVal = alarmCode;
Then your heap variable will contain the same value as the stack variable,
and can be deleted.
Bob Milton
"Robby" <Robby@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote in message
news:59EDA6D8-CA8A-4ECE-98A2-4018F935C984@xxxxxxxxxxxxxxxx
> Hi Victor,
>
> I just used one "new" statement in my code at define time, and so why the
> crash! here is the whole code:
>
> #include <iostream>
> using namespace std;
>
> class codes
> {
> public:
> codes();
> ~codes();
> void progCode(int n1);
> int returnCode() const;
>
> private:
> int theCode;
> };
>
> codes::codes():
> theCode(9999)
> {}
>
> codes::~codes()
> {}
>
> void codes::progCode(int n1)
> {
> theCode = n1;
> }
>
> int codes::returnCode() const
> {
> return theCode;
> }
>
> int main()
> {
> int alarmCode;
> int * pTempVal = new int;
>
> codes myCodes;
> alarmCode = myCodes.returnCode();
> pTempVal = &alarmCode;
> cout << "Current alarm code is:" << alarmCode << "\n" << "******:" <<
> *pTempVal ;
> cin >> alarmCode;
> myCodes.progCode(alarmCode);
> alarmCode = myCodes.returnCode();
> cout << "Current alarm code is now:" << alarmCode << "\n"
> << "******:" << *pTempVal ;
> cin >> alarmCode;
> delete pTempVal;
> return 0;
> }
>
> --
> Best regards
> Robert
>
>
> "Victor Bazarov" wrote:
>
>> Robby wrote:
>> > I have declared a pointer on the heap (freeStoreMemory) as:
>>
>> No, you have declared a pointer and initialised it with the address of
>> an int from the heap.
>>
>> > int * pTempVal = new int;
>> >
>> > I assign the pointer an address,
>>
>> Where? How? Why? It already has a value -- the address of an integer
>> you allocated on the heap.
>>
>> > then I dereference it and all is fine!
>> > However, in the book I am reading, they strongly suggest to delete your
>> > pointer so you free up the memory.
>> >
>> > however when the program gets to the following line, the program
>> > crashes!
>> >
>> > delete pTempVal;
>> >
>> > Here is the error:
>> >
>> > Debug assertion failed.....
>> > _BLOCK_TYPE_IS_VALID(phead->nBlockUse)....
>> > See C++ documentation....
>> >
>> > Why does it react this way?
>>
>> Because if you assign another value to the pointer you first obtained
>> from 'new', you (a) lose the previous pointer and (b) probably attempt
>> to 'delete' what was never allocated using 'new' in the first place.
>>
>> > And the program compiles without errors or
>> > warnings!
>>
>> Undefined behaviour (like freeing memory you didn't obtain from 'new')
>> never shows up at compile-time.
>>
>> V
>>
.
- Follow-Ups:
- Re: "delete" causes prog to crash!
- From: Robby
- Re: "delete" causes prog to crash!
- References:
- "delete" causes prog to crash!
- From: Robby
- Re: "delete" causes prog to crash!
- From: Victor Bazarov
- Re: "delete" causes prog to crash!
- From: Robby
- "delete" causes prog to crash!
- Prev by Date: Re: "delete" causes prog to crash!
- Next by Date: Re: "delete" causes prog to crash!
- Previous by thread: Re: "delete" causes prog to crash!
- Next by thread: Re: "delete" causes prog to crash!
- Index(es):
Relevant Pages
|