class 成员的动态分配和价值

dynamic allocation and value of the class member

为什么值 k 在第二次调用 check(base) 后发生变化?

class Base{
public:
    int k=0;
    virtual void print(){
        cout<< k<<endl;
    }
};

Base* check(Base* p){
   Base* t = new Base;
   t->k = 4;
   delete p;
   return t;
}

int main(){
    Base* base = new Base;
    cout<< check(base)->k; // first call, print 4
    cout<<"\n";
    cout<<base->k;// print 0
    check(base); // second call
    cout<<"\n";
    cout<< base->k; // print 4
    cout<<"\n";
    return 0;
}

输出:

4
0
4

delete ptr之后访问ptr指向的内存是UB

我猜你的情况是在你调用 delete p (a.k.a. base),
Base* t = new Basebase 用来指向的地方分配内存。