9:int *obj = new int (6); 00F714CE push 4//press stack 00f714d0 call operator new (0F711EAH)//Invoke new function to return assigned address addr---0f711eah is instruction JM P operator new Address 00F714D5 add esp,4//recovery stack 00f714d8 mov dword ptr [EBP-0F8H],EAX//Return address addr assigned to the memory space ebp-0f8h from the start address 00F714DE C MP DWORD ptr [ebp-0f8h],0//Determine if the assignment was successful 00f714e5 JE main+51h (0f71501h)//If not successfully jumped to 0x0f71501h 00F714E7 mov eax,dword ptr [ebp -0F8H]//Start address is ebp-0f8h memory space (addr) assigned to eax00f714ed mov dword ptr [eax],6//Put the memory space with the starting address of eax (addr) into 600F714F3 mov Ecx,dword PTR [ebp-0f8h]//Start address is ebp-0f8h memory space (addr) assigned to ECX00F714F9 mov dword ptr [EBP-100H],ECX// The value of ecx (addr) is assigned to the memory space where the start address is ebp-100h 00f714ff jmp main+5bh (0F7150BH)//unconditional jump to 0x0f7150b00f71501 mov dword ptr [ebp-100h],0// The memory space with the starting address of ebp-100h is set to 0---allocation fails 00f7150b mov edx,dword ptr [ebp-100h]//Start address ebp-100h memory space (addr) assigned to EDX00F71511 MOV DWORD ptr [Obj],edx//addr The content of edx to the memory space where obj is the starting address a10:delete obj;00f71514 mov eax,dword ptr [obj]//The memory space where obj is the starting address is sent to EA x00f71517 mov dword ptr [Ebp-0ech],eax//eax sent to Ebp-0ech as the starting address of the memory space 00f7151D mov ecx,dword ptr [Ebp-0ech]//memory space with Ebp-0ech as the starting address sent to ecx00f71523 push ecx//ECX stack 00f71524 call operator delete (0f710a0 h) 00f71529 Add esp,4 11:int *obj2 = new int (7), same as allocation obj
At this point the output *obj, you will get "7". Why? Obj would have been to point to the assigned address addr_obj, deleting the contents of the addr_obj, releasing the addr_obj memory, but obj itself points to it when we allocate space for OBJ2, the new function returns the first available address. This is the addr_obj that was released just now, and obj still points to that address, so I get the result. This is done occasionally correctly, but endless!!!
The addr of the placeEAX, ptr [ebp-0f8h], ecx, ptr [ebp-100h], edx, Ptr[obj]
What the new function has to do1. Call the object's constructor, allocate space, and return the address ADDR2. Assigns the returned address addr to the pointer object
What is C + + new exactly new?