Re: "delete" causes prog to crash!

Tech-Archive recommends: Repair Windows Errors & Optimize Windows Performance



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
>>


.



Relevant Pages

  • Re: "delete" causes prog to crash!
    ... use it to a pointer that points to the heap. ... and isn't a pointer supposed to hold the address of some data location. ... >> class codes ... >> int returnCode() const; ...
    (microsoft.public.vc.language)
  • Re: Memory Structure Pointer Problems
    ... typedef struct sta { ... char* name; ... int num_cmpnds; ... A pointer to a struct cmp is almost ...
    (comp.lang.c)
  • Re: C# - getting binary data from .lib
    ... Use Marshal.AllocHGlobal to allocate the memory and pass this IntPtr to the ... int retCode = create(id, scale, ptrImage); ... You now control the pointer returned. ...
    (microsoft.public.dotnet.framework.interop)
  • Re: Another spinoza challenge
    ... You should test against the int type's limits: ... typedef struct complex ... a pointer to an integer ... A macro is preferable because it is replaced by inline code, ...
    (comp.lang.c)
  • Re: Matrix - Transformation
    ... public class CODES ... private double x; ... public int BoardNumber ...
    (microsoft.public.dotnet.languages.csharp)