因为你的p类型是base *类型,即base型指针,所以p+1指向的是p指向的位置再加上一个base对象的大小,而你的数据实际上是两个derived类的对象,这两个类的对象大小是不一样的,所以你可以这样用((derived *)p + 1),即将p强制类型转换成指向derived对象的指针就应该可以了
改一个地方就行了,看注释
((derived*)p+1)->display(); // base和derived的大小不一样。由于p是base类型的指针,+1以后不能偏移到derived[1]的位置,因此要强制转换成derived类指针+1才正确
derived *p = new derived[2];//类声明为derived