这段代码会做什么? (内存管理)

时间:2009-04-18 09:38:13

标签: c++ memory-management

char *p = new char[200];
char *p1 = p;
char *p2 = &p[100];
delete [] p1;

顺便说一下,这不是测试或任何我真正需要知道的事情:)

1 个答案:

答案 0 :(得分:13)

 // allocate memory for 200 chars
 // p points to the begining of that 
 // block
 char *p = new char[200];
 // we don't know if allocation succeeded or not
 // no null-check or exception handling

 // **Update:** Mark. Or you use std::no_throw or set_new_handler. 
 // what happens next is not guranteed

 // p1 now points to the same location as p
 char *p1 = p;

 // another pointer to char which points to the
 // 100th character of the array, note that
 // this can be treated as a pointer to an array
 // for the remaining 100-odd elements
 char *p2 = &p[100];

 // free the memory for 200 chars
 delete [] p1;

 // **Update:** Doug. T
 // [...] p and p2 are now pointing to freed memory 
 // and accessing it will be undefined behavior 
 // depending on the executing environment.