我知道对使用placement new 创建的变量调用delete 然后访问该内存块具有未定义的行为。
int* x = new int[2];
char* ch = new(x) char();
*ch = 't';
delete ch;
但是,如果在堆栈上分配内存块而不是堆,然后我们对该变量调用 delete 然后访问内存,我会收到块类型无效的异常。
int x[2];
char* ch = new(x) char();
*ch = 't';
delete ch;
所以问题清单是:
- 异常是由于在堆栈上调用 delete 引起的吗?
- 可以在堆栈上的内存块上使用新的放置吗?
- 如果是,那么我该如何删除字符指针。
- 是否可以使用placement new 在单个内存块上分配多个变量?